C ++函数指针分配无法转换类内的类型

c++classfunctionpointers

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”);
}

指向成员函数的指针不是常规函数指针。 该类是该类型的一部分,您需要指定要使用哪个对象进行调用。

您需要使用正确的类型

1typedef 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的类型或为其提供常规函数以进行调用。

提示:任何时候您的编译器因无法将其转换为该错误而抱怨…您的类型不匹配。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注