我在ClassA中有一个静态funcA,它在classA中调用非静态funcB。虽然我给了funcB调用的对象,但我仍然得到错误:无法调用没有对象的成员函数
void* ClassA::funcA(void *arg)
{
ClassA *pC = reinterpret_cast<ClassA *>(arg);
funcB(pc);
}
void* ClassA::funcB(ClassA *arg)
{
}
是什么原因?
答案 0 :(得分:1)
可以在没有对象的情况下调用静态类方法,就像你正在做的那样
需要在对象上调用常规类方法,如下所示:objectInstance.classMethod( arguments go here )
或objectPointer->classMethod( arguments go here )
试试这个(在你的类声明中更改funcB的签名以匹配之后):
void* ClassA::funcA(void *arg)
{
ClassA *pC = reinterpret_cast<ClassA *>(arg);
pC->funcB();
}
void* ClassA::funcB()
{
...
}
答案 1 :(得分:1)
问题是要调用funcB,应该通过以下对象来完成:
pC->funcB(pC);
实际上这种代码更像C而不是C ++,因为如果你在对象上调用方法,则不需要将它作为参数传递。
答案 2 :(得分:1)
您正在使用静态方法进行调用,因此范围内没有接收器对象。
因此,您无法调用非静态方法。
您需要一个对象,它将收到消息:o.funcB(pc);
答案 3 :(得分:0)
从静态函数调用成员函数不是一个好主意,这里错误的原因是从静态方法调用了functionB。静态方法不能调用非静态成员函数。原因是静态函数对不在对象上的类进行操作。