Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自定义对象的向量:分配编译失败_C++_Stl_Vector - Fatal编程技术网

C++ 自定义对象的向量:分配编译失败

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

我正在创建自定义对象的向量并调用assign,如下所示:

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 );