C++ C++;通过函数指针的函数方法

C++ C++;通过函数指针的函数方法,c++,function-pointers,class-method,C++,Function Pointers,Class Method,我试图理解函数指针是如何工作的,但我无法解释为什么会出现以下错误 #include <iostream> using namespace std; enum COLOR {RED,BLACK,WHITE}; class Car {public: Car (COLOR c): color(c) { cout<<"Car's constructor..."<<endl; CarsNum++;} ~Car () {cout<<"Car's des

我试图理解函数指针是如何工作的,但我无法解释为什么会出现以下错误

#include <iostream>

using namespace std;
enum COLOR {RED,BLACK,WHITE};

class Car
{public:
 Car (COLOR c): color(c) { cout<<"Car's constructor..."<<endl; CarsNum++;}
 ~Car () {cout<<"Car's destructor..."<<endl; CarsNum--;}
 void GetColor () { cout<<"Color of the car is"<<color<<endl;}
 static int GetCarsNum () {cout<<"Static membet CarsNum="<<CarsNum<<endl; return 0;}
private:
COLOR color;
static int CarsNum;

};

int Car::CarsNum=0;

int main()
{
int (Car::*pfunc) () = NULL;
pfunc=&Car::GetCarsNum ();


 Car *ptr= new Car(RED);
 ptr->GetColor ();
 ptr->GetCarsNum ();
 delete ptr;
 ptr=0;
 Car::GetCarsNum();
    return 0;
}

任何帮助都将不胜感激

无需亲子关系:

pfunc=&Car::GetCarsNum;

哦,更新: 您有静态方法: 在本例中,GetCarsNum()只是一个简单的函数:

int (*pfunc) () = &Car::GetCarsNum;

无需亲子关系:

pfunc=&Car::GetCarsNum;

哦,更新: 您有静态方法: 在本例中,GetCarsNum()只是一个简单的函数:

int (*pfunc) () = &Car::GetCarsNum;

无需亲子关系:

pfunc=&Car::GetCarsNum;

哦,更新: 您有静态方法: 在本例中,GetCarsNum()只是一个简单的函数:

int (*pfunc) () = &Car::GetCarsNum;

无需亲子关系:

pfunc=&Car::GetCarsNum;

哦,更新: 您有静态方法: 在本例中,GetCarsNum()只是一个简单的函数:

int (*pfunc) () = &Car::GetCarsNum;

使用
&Car::GetCarsNum()
调用
GetCastNum
,并获取返回值使其成为指针(地址为运算符
&

要解决此问题,只需删除括号:

pfunc=&Car::GetCarsNum;

使用
&Car::GetCarsNum()
调用
GetCastNum
,并获取返回值使其成为指针(地址为运算符
&

要解决此问题,只需删除括号:

pfunc=&Car::GetCarsNum;

使用
&Car::GetCarsNum()
调用
GetCastNum
,并获取返回值使其成为指针(地址为运算符
&

要解决此问题,只需删除括号:

pfunc=&Car::GetCarsNum;

使用
&Car::GetCarsNum()
调用
GetCastNum
,并获取返回值使其成为指针(地址为运算符
&

要解决此问题,只需删除括号:

pfunc=&Car::GetCarsNum;

我认为通过在方法后面加括号,可以调用该方法。这使编译器感到困惑。他现在认为&运算符被用作二进制运算符。
因此,删除()并只指定函数名。

我认为通过在方法后面加括号,可以调用该方法。这使编译器感到困惑。他现在认为&运算符被用作二进制运算符。
因此,删除()并只指定函数名。

我认为通过在方法后面加括号,可以调用该方法。这使编译器感到困惑。他现在认为&运算符被用作二进制运算符。
因此,删除()并只指定函数名。

我认为通过在方法后面加括号,可以调用该方法。这使编译器感到困惑。他现在认为&运算符被用作二进制运算符。 所以删除()并只指定函数名。

谢谢,伙计们。 现在我看到了指向静态方法的指针之间的差异(在本例中,我们使用syntaxis作为简单函数)

在这种情况下,带“&”和不带“&”的int给出了相同的结果(区别是什么)。 并称之为:

pfunc();
(ptr->*pfunc2)();
和另一侧-标准方法上的函数指针:

void (Car::*pfunc2) () = NULL;
pfunc2=&Car::GetColor;
并称之为:

pfunc();
(ptr->*pfunc2)();
谢谢,伙计们。 现在我看到了指向静态方法的指针之间的差异(在本例中,我们使用syntaxis作为简单函数)

在这种情况下,带“&”和不带“&”的int给出了相同的结果(区别是什么)。 并称之为:

pfunc();
(ptr->*pfunc2)();
和另一侧-标准方法上的函数指针:

void (Car::*pfunc2) () = NULL;
pfunc2=&Car::GetColor;
并称之为:

pfunc();
(ptr->*pfunc2)();
谢谢,伙计们。 现在我看到了指向静态方法的指针之间的差异(在本例中,我们使用syntaxis作为简单函数)

在这种情况下,带“&”和不带“&”的int给出了相同的结果(区别是什么)。 并称之为:

pfunc();
(ptr->*pfunc2)();
和另一侧-标准方法上的函数指针:

void (Car::*pfunc2) () = NULL;
pfunc2=&Car::GetColor;
并称之为:

pfunc();
(ptr->*pfunc2)();
谢谢,伙计们。 现在我看到了指向静态方法的指针之间的差异(在本例中,我们使用syntaxis作为简单函数)

在这种情况下,带“&”和不带“&”的int给出了相同的结果(区别是什么)。 并称之为:

pfunc();
(ptr->*pfunc2)();
和另一侧-标准方法上的函数指针:

void (Car::*pfunc2) () = NULL;
pfunc2=&Car::GetColor;
并称之为:

pfunc();
(ptr->*pfunc2)();



请始终指明错误消息提到的准确行。使用
auto
将大大简化此代码。请始终指明错误消息提到的准确行。使用
auto
将大大简化此代码。请始终指明错误消息提到的准确行。使用
auto
将大大简化此代码简化此代码。请始终指出错误消息中提到的确切行。使用
auto
将大大简化此代码。为什么不在注释中提及如此小的答案,因为这样问题将没有答案:)我将重新措辞,以明确不仅不需要括号,括号实际上是错的。(这就是他出错的原因。)@kec,Tejas Patel为我快速、不清楚的回答感到抱歉为什么不在评论中提及这么小的答案,因为这样这个问题就没有答案了:)我要重新措辞,明确说明不仅不需要括号,而且括号实际上是错的。(这就是他出错的原因。)@kec,Tejas Patel为我快速、不清楚的回答感到抱歉为什么不在评论中提及这么小的答案,因为这样这个问题就没有答案了:)我要重新措辞,明确说明不仅不需要括号,而且括号实际上是错的。(这就是他出错的原因。)@kec,Tejas Patel为我快速、不清楚的回答感到抱歉为什么不在评论中提及这么小的答案,因为这样这个问题就没有答案了:)我要重新措辞,明确说明不仅不需要括号,而且括号实际上是错的。(这就是他出错的原因。)@kec,Tejas Patel为我的快速、不清楚道歉answer@AlexanderBrevig由于成员函数是静态的,那么是。@重复数据消除程序:答案确实有&,但是。在这种情况下,我遇到了另一个错误:| 23 |错误:无法将“int()”转换为“int(Car:*)()'在作业|@user3604569中,您需要从
pfunc
的声明中删除
Car::
。因为