这是我之前发布的帖子的后续问题:C++: Initializing Struct and Setting Function Pointer
我的新问题是如何在结构中调用指向成员的函数?我已将之前的代码修改为:
float MyClass::tester(float v){
return 2.0f*v;
}
struct MyClass::Example{
float(Scene_7::*MyFunc)(float);
float DoSomething(float a){
return (MyFunc)(a); //ERROR, SEE BELOW FOR OUTPUT
}
};
然后我按如下方式设置函数,并将结果输出到调用:
struct Example e;
e.MyFunc = &MyClass::tester;
std::cerr << e.DoSomething(1.0f) << std::endl;
我收到以下错误:必须使用'。'或' - &gt; '来调用指向成员的指针函数...
问题是我不知道该怎么做。我猜我必须在this->*(myFunc)(a)
内调用类似DoSomething
的内容,但this
引用结构。我已经尝试搜索“这在结构指针到成员函数中”,但一直无法找到任何东西。任何帮助或建议都会很棒。我觉得我很接近,但这只是语法问题。
答案 0 :(得分:0)
.*
和->*
的运算符优先级是,恕我直言,打破了。您需要将操作数包装在括号中以便调用。
return (this->*MyFunc)(a);
否则,编译器会认为您正在执行this->*(MyFunc(a))
,这显然无效。
有趣的是,作为独立表达式的(this->*MyFunc)
也是无效的。 需要在现场调用。
答案 1 :(得分:0)
我无法判断你是否有其他错误,缺少代码,但你以错误的方式调用成员函数,你这样称呼它们:
return (obj->*MyFunc)(6);
我不确定你是否可以使用this
代替上面一行的obj
,因为从声明中,你需要一个指向Scene_7
类型对象的指针,所以你需要知道代码中该位置的正确类型的指针..
答案 2 :(得分:0)
请记住。运算符的优先级高于*运算符。因此,在处理指针和结构等时,您需要使用paranthesis或 - &gt;运算符,表示指针指向什么。