簡體   English   中英

沒有對象錯誤就無法調用成員函數

[英]cannot call member function without object error

我在ClassA中有一個靜態funcA,它在classA中調用了非靜態funcB。 盡管我將對象賦予funcB調用,但仍然出現錯誤:沒有對象就無法調用成員函數

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

   funcB(pc);
}

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

}

是什么原因呢?

可以像您一樣在沒有對象的情況下調用靜態類方法。
需要在對象上調用常規的類方法,如下所示: 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()
{
    ...
}

問題是調用funcB應該通過一些對象來完成,例如:

pC->funcB(pC);

實際上,這種代碼比C ++更像C,因為如果您在對象上調用方法,則不需要將其作為參數傳遞。

您是從靜態方法調用的,因此作用域中沒有接收方對象。

因此,您不能調用非靜態方法。

您需要一個對象,該對象將收到消息: o.funcB(pc);

從靜態函數調用成員函數不是一個好主意,之所以出現錯誤是因為從靜態方法中調用了functionB。 static方法不能調用非靜態成員函數。 原因是靜態函數對類而不對對象起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM