2011-02-09 33 views
1

我創建的自定義對象的矢量和呼叫分配如下:向量自定義對象:指定編譯失敗

class myClass 
{ 
     public: 
       myClass() { cout<<"MyClass def const"<<endl; } 
       myClass(const myClass &mclass) {cout<<"Default const"<<endl;} 
       myClass& operator=(myClass &mclass) { cout<<"called overloaded = operator"<<endl; return mclass; } 
}; 


int main() 
{ 
     myClass m; 
     cout<<"orginal object:"<<endl; 
     vector<myClass> vec1,vec2,vec3; 
     vec1.assign(10,m); 
     return 0; 
} 

相關的編譯錯誤:

/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../../include/c++/4.3.2/bits/stl_vector.h:344: instantiated from ‘void std::vector<_Tp, _Alloc>::assign(size_t, const _Tp&) [with _Tp = myClass, _Alloc = std::allocator<myClass>]’ 
test.cpp:52: instantiated from here 
/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../../include/c++/4.3.2/bits/stl_algobase.h:686: error: no match for ‘operator=’ in ‘* __first = __value’ 
test.cpp:43: note: candidates are: myClass& myClass::operator=(myClass&) 

我不知道我是什麼因爲我重載了=運算符而錯過了。

編輯:

看來我的簽名是錯誤的,如下更正。據我瞭解,有效簽名是:

(1) MyClass& operator=(const MyClass& rhs); 
(2) MyClass& operator=(MyClass& rhs); 
(3) MyClass& operator=(MyClass rhs); 
(4) const MyClass& operator=(const MyClass& rhs); 
(5) const MyClass& operator=(MyClass& rhs); 
(6) const MyClass& operator=(MyClass rhs); 
(7) MyClass operator=(const MyClass& rhs); 
(8) MyClass operator=(MyClass& rhs); 
(9) MyClass operator=(MyClass rhs); 

限制傳遞參數作爲const引用定義的限制在哪裏?

回答

4

賦值運算符的參數必須是const,例如,

myClass& operator=(const myClass &mclass)

+0

謝謝!這工作。我在印象之下重載運算符的有效簽名是:(1)MyClass&operator =(const MyClass&rhs); (2)MyClass&operator =(MyClass&rhs); (3)MyClass&operator =(MyClass rhs); (4)const MyClass&operator =(const MyClass&rhs); (5)const MyClass&operator =(MyClass&rhs); (6)const MyClass&operator =(MyClass rhs); (7)MyClass operator =(const MyClass&rhs); (8)MyClass operator =(MyClass&rhs); (9)MyClass operator =(MyClass rhs); –

+0

@Ricko:因爲這是包含的要求,所以它們必須是* copy assignable *,而複製意味着不修改源,這意味着一個const引用,而不是一個非const引用。這就是爲什麼我們不能在容器中使用'auto_ptr'。 – GManNickG

+0

@GMan - 謝謝:) –