我有一个无效的功能。我传入一个对象(调用是MyClass)。该函数用于从MyClass调用方法并返回其输出。所以,我正在将对象转换为自身(它作为void传递)
MyClass* func = dynamic_cast<MyClass*>(func1)
但是,当我尝试从MyClass(func)调用一个方法时,我得到了这个错误......
cannot convert 'MyClass::method' from type 'int (MyClass::)()' to type 'int'
我的猜测是我使用错误的方法来转换对象。那是错误告诉我的吗?
非常感谢您指出的任何文件。
EDIT 这是我的实际功能
int call_method(void *func1)
{
UserStatistics* func = dynamic_cast<UserStatistics*>(func1)
return func->numCurrUsers;
}
我对UserStatistics类的唯一了解是它有一些返回int的虚方法(如numCurrUsers)。我实际上无法访问类本身,只是有关如何访问它的文档。
答案 0 :(得分:3)
但是,当我尝试从MyClass(func)调用一个方法时,我得到了这个错误......
cannot convert 'MyClass::method' from type 'int (MyClass::)()' to type 'int'
我的猜测是我使用错误的方法来转换对象。那是错误告诉我的吗?
没有。该错误消息告诉您,您正在尝试返回指向int
的指针指向方法。这是因为这句话:
[UserStatistics]有一些虚拟方法(如numCurrUsers)返回int 。
这意味着你需要调用方法并返回它返回的值,而不是返回方法本身。
这与演员本身无关。是的,你使用错误的演员。您需要使用static_cast
代替dynamic_cast
。
试试这个:
int call_method(void *func1)
{
UserStatistics* func = static_cast<UserStatistics*>(func1)
return func->numCurrUsers();
}
答案 1 :(得分:0)
只有在具有类的多态实现时才使用dynamic_cast
。通常,当基类指针保存派生类对象的地址时,可以dynamic_cast
基指针获取派生类对象的地址。
在您的情况下,您需要使用static_cast
代替:
static_cast<MyClass*>(func1);