Вектор пользовательских объектов: назначить ошибку компиляции - PullRequest
1 голос
/ 09 февраля 2011

Я создаю вектор пользовательских объектов и вызываю метод 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;
}

Соответствующие ошибки компиляции:

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

Где определено ограничение для передачи аргумента в качестве константной ссылки?

1 Ответ

4 голосов
/ 09 февраля 2011

Аргументом для оператора присваивания должно быть const, например,

myClass& operator=(const myClass &mclass)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...