2013-05-02 790 views
1

我有以下主文件,我嘗試創建一個預定義值的映射,並將其傳遞給其他方法進一步處理。主文件被作爲如下所示:編譯錯誤C++:無法調用沒有對象的成員函數

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的對象,或者它是一種錯誤的聲明方式?

回答

2

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

p.setPorto(_portoInit); 

除非setPortostatic方法,你的代碼是無效的。

1

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

p.setPorto(_portoInit); 

注意,非靜態成員函數接受(可能CV合格)的隱含的首參數類型T *,所以你可以有人稱它是這樣的:

Porto::setPorto(&p, _portoInit); 

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

1

你應該寫

p.setPorto(_portoInit); 

的「::」定義函數的範圍和在上述隱含的,因爲誰的功能是被稱爲是波爾圖的對象。

相關問題