2017-05-31 100 views
0

我的代碼,爲什麼編譯器不提供默認的operator =模板類?

template<typename T> 
class NamedObject{ 
public: 

    NamedObject(std::string& name, const T& value):nameValue(name), objectValue(value) 
    { 

    } 

private: 
    std::string& nameValue; 
    const T objectValue; 
}; 

int main(int argc, char* argv[]) 
{ 
    NamedObject<int> obj1(std::string("Obj1"),3); 
    NamedObject<int> obj2(std::string("Obj2"),3); 

    obj2 = obj1; //this line gives error 


    return 0; 
} 

我得到錯誤,

錯誤1個錯誤C2582: '運算符=' 功能是 'NamedObject' C不可用:\用戶\ pkothari \文檔\ Visual工作室 2008 \項目\ stackoflw \ stackoflw \ stackoflw.cpp 39

我還沒有提供任何運營商=,不應編譯器提供默認嗎?

@編輯爲顯示爲重複:我同意const,引用可以引用另一個對象的成員。

+0

你寫了一個非默認構造函數,所以沒有編譯器提供'operator =' –

+4

@PasserBy,這是不正確的。構造函數與'operator =' – Ajay

+0

@Ajay沒有任何關係哦,哎呀,這是我記憶中修復的一個洞 –

回答

2

模板與它無關。您的班級有一個const數據成員,並且對string有參考。您需要刪除const屬性以及來自string數據成員的引用說明符。我建議你在不使用模板的情況下實現這個類。

+0

我知道它與Template無關。我也嘗試刪除const。但引用可以引用另一個對象的成員,對嗎? –

+0

引用不是指針。一個int *可以指向其他的東西,但是一個int&不能在以後引用其他東西。 – Ajay

相關問題