我的代码组织如下
class MyClass
{
public:
typedef void (MyClass::Ptr2func)();
}
struct abc
{
MyClass::Ptr2func ptr;
bool result;
}
void main()
{
MyClass myCls;
abc var;
//here is a lot of decision making code and pointer initializations
//I want to copy the pointer to function in another variable
MyClass::Ptr2func tempPtr;
tempPtr=var.ptr;
}
当我尝试将var.ptr
复制到tempPtr
时,它给出了一个编译错误,即参数列表丢失。它还给了我myCls.*(var.ptr())
的编译错误;有优先问题吗?我尝试过使用括号但没有任何作用。我希望有人可以帮助我。
谢谢和问候, Saba Taseer
答案 0 :(得分:2)
我认为问题在于你的typedef
typedef void (MyClass::Ptr2func)();
没有为指向成员函数的指针定义typedef,而是为成员函数类型定义。成员函数指针的typedef为
typedef void (MyClass::* Ptr2func)();
注意这里涉及的显式指针。类型
typedef void (MyClass::Ptr2func)();
实际上是MyClass
内成员函数类型的typedef,它不带参数并返回void。
至于你的最后一个问题,调用指向成员函数的指针的正确语法是(我相信)
(myCls.*var.ptr)()
请注意,在尝试将其称为函数之前,必须将表达式(myClass.*var.ptr)
括起来,因为代码
myCls.*(var.ptr())
表示“取消引用var.ptr()
相对于对象myCls
返回的指向成员的指针。
希望这有帮助!
答案 1 :(得分:1)
此:
typedef void (MyClass::Ptr2func)();
定义一个函数类型。 MyClass::
在该定义中完全无关紧要;最终类型为void ()
。 (为什么?你在MyClass中,所以MyClass::
被视为强化,你希望typedef Ptr2func
属于MyClass,而不是你希望该类型指定成员函数的语句。)
你想要这个:
typedef void (MyClass::*Ptr2func)();
定义了指向成员函数的指针。
答案 2 :(得分:-2)
你问的是编译错误。
在我写这篇文章时,你的代码在每个类定义后都没有半字节。
此外,几乎任何其他编译器都会对MSVC作出反应void main
;使用标准int main
。
作为一个完全初学者(犯这些错误),使用成员指针并不是一个好主意。
根本不这样做,而是解释你希望通过它实现的目标。
干杯&第h