[英]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);
除非setPorto
是static
方法,否則您的代碼無效。
setPorto
是一個非靜態成員函數,因此您需要在Porto
實例上調用它。 例如:
p.setPorto(_portoInit);
請注意,非靜態成員函數采用隱式的第一個參數(可能是cv限定的)類型T *,因此您可以像這樣調用它:
Porto::setPorto(&p, _portoInit);
在這兩種情況下,您都需要一個對象來調用成員函數。 這就是編譯器告訴你的。
你應該寫
p.setPorto(_portoInit);
“::”定義了函數的范圍,並且隱含在上面,因為調用函數的對象是Porto。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.