簡體   English   中英

編譯錯誤C ++:無法在沒有對象的情況下調用成員函數

[英]compilation error C++ : can not call member function without object

我有以下主文件,我嘗試創建具有預定義值的地圖,並將其傳遞給其他方法進一步處理。 主文件如下所示:

int main(){
  map<id,Porto> _portoInit;

  id = 1;

  Porto p;
  p.val = 5;

  _portoInit.insert(pair<id, Porto>(id, p));

  Porto::setPorto(_portoInit);

  return 1;
}

其中setPorto在類下定義如下(在單獨的文件中)

void Porto::setPorto( const map<id,Porto>&  _portoblock ) {
   //do stuffs
};

我收到錯誤提示“錯誤:無法調用成員函數...沒有對象”我是不是已經在主文件中聲明了_portoInit的對象,或者它是一種錯誤的聲明方式?

您需要通過實際對象調用該方法:

p.setPorto(_portoInit);

除非setPortostatic方法,否則您的代碼無效。

setPorto是一個非靜態成員函數,因此您需要在Porto實例上調用它。 例如:

p.setPorto(_portoInit);

請注意,非靜態成員函數采用隱式的第一個參數(可能是cv限定的)類型T *,因此您可以像這樣調用它:

Porto::setPorto(&p, _portoInit);

在這兩種情況下,您都需要一個對象來調用成員函數。 這就是編譯器告訴你的。

你應該寫

p.setPorto(_portoInit);

“::”定義了函數的范圍,並且隱含在上面,因為調用函數的對象是Porto。

暫無
暫無

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

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