2016-12-18 6 views
1
struct myType{ 
public:  

    myType operator=(const myType &value){ 
     return value; 
    }; 

}; 

MyType имеет перегрузку оператора для = но, когда она вызывается в классе JSON в it = js.allInfo.begin(); компиляторе бросает: «Нет жизнеспособные перегрузки для„=“»Нет жизнеспособные перегрузок для «=», когда существует оператор

class JSON{ 

private: 
vector<myType> allInfo; 

public:  

friend ostream &operator<<(ostream &os,const JSON &js) 
{ 
    vector<myType>::iterator it; 

    for(it = js.allInfo.begin(); it != js.allInfo.end();it++){ 
     cout << "this is the info "<<(it->getNAME()) << endl; 
    } 
    return os; 
}; 

Что я должен изменить в перегрузке = исправить эту проблему

+0

Обычно типа возвращаемого для оператора присваивания является ссылкой этот тип, в этом случае это будет 'myType &'. Вы возвращаете 'myType' из' operator = ', а не' myType & '. Не знаю, поможет ли это вам ... –

+0

Я уже делаю это const myType & value, это то же самое, что и const myType & value, если это то, что вы имеете в виду –

+0

Нет, 'const' правильный для аргумента, но а не для типа возврата. –

ответ

6

Вы пытаетесь итерация константного объекта (константный JSON & JS) с неконстантным итератором.

Используйте константный итератор:

vector<myType>::const_iterator it; 

еще лучше, используйте ключевое слово «авто», чтобы автоматически получить соответствующий тип:

auto it = js.allInfo.begin() 
+0

. Еще лучше, используйте цикл диапазона. –

 Смежные вопросы

  • Нет связанных вопросов^_^