C++ 自定义对象的向量:分配编译失败
我正在创建自定义对象的向量并调用assign,如下所示:C++ 自定义对象的向量:分配编译失败,c++,stl,vector,C++,Stl,Vector,我正在创建自定义对象的向量并调用assign,如下所示: class myClass { public: myClass() { cout<<"MyClass def const"<<endl; } myClass(const myClass &mclass) {cout<<"Default const"<<endl;} myCl
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;
}
在哪里定义了作为常量引用传递参数的限制 赋值运算符的参数必须是常量,例如
myClass&operator=const myClass&mclass赋值运算符的参数必须是const,例如
myClass&operator=const myClass&mclass谢谢!成功了。我的印象是重载运算符的有效签名是:1 MyClass&operator=const MyClass&rhs;2 MyClass&operator=MyClass&rhs;3 MyClass&operator=MyClass rhs;4常量MyClass和运算符=常量MyClass和rhs;5常量MyClass&运算符=MyClass&rhs;6常量MyClass&运算符=MyClass rhs;7 MyClass运算符=常量MyClass和rhs;8 MyClass运算符=MyClass和rhs;9 MyClass运算符=MyClass rhs@里科:因为这是contains的要求,它们必须是可复制分配的,复制意味着不修改源代码,这意味着常量引用,而不是非常量引用。这就是为什么我们不能在容器中使用auto_ptr。@Ricko vector::assign方法接受常量&作为输入,因此在赋值运算符调用中它是常量。MyClass&operator=MyClass o no引用也可以工作,但是创建了一个临时对象谢谢!成功了。我的印象是重载运算符的有效签名是:1 MyClass&operator=const MyClass&rhs;2 MyClass&operator=MyClass&rhs;3 MyClass&operator=MyClass rhs;4常量MyClass和运算符=常量MyClass和rhs;5常量MyClass&运算符=MyClass&rhs;6常量MyClass&运算符=MyClass rhs;7 MyClass运算符=常量MyClass和rhs;8 MyClass运算符=MyClass和rhs;9 MyClass运算符=MyClass rhs@里科:因为这是contains的要求,它们必须是可复制分配的,复制意味着不修改源代码,这意味着常量引用,而不是非常量引用。这就是为什么我们不能在容器中使用auto_ptr。@Ricko vector::assign方法接受常量&作为输入,因此在赋值运算符调用中它是常量。MyClass&operator=MyClass o没有引用也会起作用,但创建了一个临时对象
/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 );