C++ Function Pointer assignment cannot convert types inside a class
本问题已经有最佳答案,请猛点这里访问。
我有一个简单的类,该类具有指向函数的指针。 构造函数将其指向函数” morning()”,并且在编译时收到错误消息:
1 2 | error: cannot convert ‘Test::morning’ from type ‘void (Test::)()’ to type ‘Test::function {aka void (*)()}’ Test() {assignPtr = morning;} |
当在函数外部声明” morning()”和typedef时,代码会编译,而我无法弄清楚如何使其在当前类中工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream> #include <string>class Test { public: Test() {assignPtr = morning;} void say(std::string a) {name = a; assignPtr();}; private: typedef void(*function)(); void morning() {std::cout <<“Good morning,” << name << std::endl;} void night() {}; function assignPtr; std::string name; };int main() { Test a; a.say(“Miguel”); } |
指向成员函数的指针不是常规函数指针。 该类是该类型的一部分,您需要指定要使用哪个对象进行调用。
您需要使用正确的类型
1 | typedef void(Test::*function)(); |
然后在创建指针和调用指针时都调整语法。
1 2 | Test() {assignPtr = &Test::morning;} // Get pointer-to-member void say(std::string a) {name = a; (this->*assignPtr)();}; // Use pointer-to-member |
函数指针和成员函数指针不是一回事。 那就是编译器告诉您的内容。 类型不匹配。 您的目标定义为void(*)(),而您正尝试将其交付给void(Test::*)()。 它们甚至没有相同的调用语义。 后者具有Test*const this盲参数。
更改function的类型或为其提供常规函数以进行调用。
提示:任何时候您的编译器因无法将其转换为该错误而抱怨…您的类型不匹配。