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::
。因为