没有对象错误就无法调用成员函数

时间:2014-02-14 09:43:14

标签: c++ oop static-members

我在ClassA中有一个静态funcA,它在classA中调用非静态funcB。虽然我给了funcB调用的对象,但我仍然得到错误:无法调用没有对象的成员函数

void* ClassA::funcA(void *arg)
{
   ClassA *pC = reinterpret_cast<ClassA *>(arg);

   funcB(pc);
}

void* ClassA::funcB(ClassA *arg)
{

}

是什么原因?

4 个答案:

答案 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。静态方法不能调用非静态成员函数。原因是静态函数对不在对象上的类进行操作。