C++ C++;函数指针赋值不能转换类内的类型

C++ C++;函数指针赋值不能转换类内的类型,c++,function,class,pointers,C++,Function,Class,Pointers,我有一个简单的类,它有一个指向函数的指针。构造函数将其指向函数“morning()”,我在编译时收到错误消息: error: cannot convert ‘Test::morning’ from type ‘void (Test::)()’ to type ‘Test::function {aka void (*)()}’ Test() {assignPtr = morning;} 当“morning()”和typedef在函数外部声明时,代码会编译,但我不知道如何使其在当前类中工

我有一个简单的类,它有一个指向函数的指针。构造函数将其指向函数“morning()”,我在编译时收到错误消息:

error: cannot convert ‘Test::morning’ from type ‘void (Test::)()’ to type ‘Test::function {aka void (*)()}’
     Test() {assignPtr = morning;}
当“morning()”和typedef在函数外部声明时,代码会编译,但我不知道如何使其在当前类中工作

#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");
}
#包括
#包括
课堂测试{
公众:
Test(){assignPtr=morning;}
void say(std::string a){name=a;assignPtr();};
私人:
typedef void(*函数)();

void morning(){std::cout函数指针和指向成员函数的指针不是一回事。这是编译器告诉您的。类型不匹配。您的目标被定义为
void(*)(
),您正试图将其交给
void(测试::*)()
。它们甚至没有相同的调用语义。后者有一个blind
Test*const this
参数

更改
函数的类型
或给它一个常规函数来调用


提示:任何时候,当您的编译器因抱怨无法将此转换为那个而出错时,您的类型都不匹配。

函数指针和成员函数指针不是一回事。这是编译器告诉您的。类型不匹配。您的目标被定义为
void(*)()
而您正试图将它交给void(Test::*)()
。它们甚至没有相同的调用语义。后者有一个blind
Test*const this
参数

更改
函数的类型
或给它一个常规函数来调用


提示:任何时候,当您的编译器因抱怨无法将此转换为那个而出错时,您的类型都不匹配。

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

您需要使用正确的类型

typedef void(Test::*function)();
然后在创建指针和调用指针时调整语法

Test() {assignPtr = &Test::morning;} // Get pointer-to-member
void say(std::string a) {name = a; (this->*assignPtr)();};  // Use pointer-to-member

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

您需要使用正确的类型

typedef void(Test::*function)();
然后在创建指针和调用指针时调整语法

Test() {assignPtr = &Test::morning;} // Get pointer-to-member
void say(std::string a) {name = a; (this->*assignPtr)();};  // Use pointer-to-member