2016-12-18 2 views
-1

Компилятор бросает: «Недействительное использование нестатического элемента« это », почему это? Наследование верное, но я не понимаю, почему он не позволяет мне использовать его, и allInfo вектор.Ошибка: недопустимое использование нестатического элемента

class JSON{ 

    private: 
    vector<myType> allInfo; 

    public: 

    friend ostream &operator<<(ostream &os,const JSON &js) 
    { 
     vector<myType>::iterator it; 
     it = this->allInfo.begin(); 

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

}; 
+3

Вы хотите 'js.allInfo' (и' const_iterator'). 'operator <<' здесь не является членом 'JSON'; для доступа к членам 'JSON' вам нужно указать объект, из которого вы хотите его получить. К счастью, один из них легко передается в качестве параметра. –

ответ

3

< < оператор является friend функция, это на самом деле не является членом класса JSON. Поэтому, если вы просто говорите allInfo, компилятор не знает, что allInfo вы говорите.

Однако, ct JSON экземпляр передается как параметр. Вы должны написать такие строки:

it = js.allInfo.begin(); 
/* ... */ 
for(it; it != js.allInfo.end();it++){ 

Теперь вы говорите, компилятор, который вы хотите использовать allInfo, который принадлежит к экземпляру js.

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