C++代码VS报错:在没有适当 operator() 的情况下调用类类型的对象或将函数转换到指向函数的类型

在编写线段树的update函数时遇到递归错误,起初误以为是C++的关键字冲突,但实际上是由于函数名与一个名为update的数组重名导致。改函数名为update1后问题解决。

遇到的问题:

在写线段树的时候,写了一个update函数,但在递归的时候报了:在没有适当 operator() 的情况下调用类类型的对象或将函数转换到指向函数的类型。这样的错误。

解决方法:改函数名 ,把update改成update1就解决了

 

为什么?

我的猜测是update是C++的一个关键字,查了一下并不是。

但我发现原来是我还起了一个叫update的数组,原来是重名了。。。

 

提供的引用内容未涉及Primer成员函数没有适当operator()情况下无法调用类类型对象函数转换指向函数类型问题的解决方案。不过,从一般的C++编程角度来看,可尝试以下常见解决办法: ### 重载operator()类类型对象要像函数一样被调用,可通过重载`operator()` 实现。比如: ```cpp #include <iostream> class MyFunctionObject { public: // 重载operator() int operator()(int a, int b) { return a + b; } }; int main() { MyFunctionObject func; int result = func(3, 4); // 像调用函数一样调用对象 std::cout << "Result: " << result << std::endl; return 0; } ``` ### 提供合适的类型转换函数 若要将类对象转换指向函数类型,可提供合适的类型转换函数。例如: ```cpp #include <iostream> int add(int a, int b) { return a + b; } class FunctionWrapper { public: // 类型转换函数 operator int(*)(int, int)() { return add; } }; int main() { FunctionWrapper wrapper; int (*funcPtr)(int, int) = wrapper; // 将对象转换函数指针 int result = funcPtr(3, 4); std::cout << "Result: " << result << std::endl; return 0; } ``` ### 使用std::function `std::function` 可存储、复制和调用任何可调用对象。当需要将类对象作为函数使用时,可借助`std::function` 实现。例如: ```cpp #include <iostream> #include <functional> class MyCallable { public: int call(int a, int b) { return a + b; } }; int main() { MyCallable obj; std::function<int(int, int)> func = [&obj](int a, int b) { return obj.call(a, b); }; int result = func(3, 4); std::cout << "Result: " << result << std::endl; return 0; } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值