为什么编译器不为模板类提供默认的operator =?

时间:2017-05-31 04:44:08

标签: c++ operator-overloading

我的代码,

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:'operator ='功能不可用   'namedObject'c:\ users \ pkothari \ documents \ visual studio   2008 \ projects \ stackoflw \ stackoflw \ stackoflw.cpp 39

我没有提供任何operator =,编译器是否应该提供默认值?

@Edit显示为重复:我同意const,引用可以引用另一个对象的成员。

1 个答案:

答案 0 :(得分:2)

模板与它无关。您的班级有一个const数据成员,并且引用了string。您需要从const数据成员中删除string属性作为参考说明符。我建议你不使用模板来实现这个类。