2016-03-02 3 views
-1

Я определил два класса:Класс, содержащий вектор классов

class Group 
{ 
    public: 
    Group (void); 
    bool addStudent (const Student & X); 
    void printAll(void) const; 

    protected: 
    vector<Student> vectorOfStudents; 
}; 
//----------------------------------------------- 
class Student 
{ 
    public: 
    Student (string name, int age); 
    void printAtributes (void); 

    protected: 
    string     nameOfStudent; 
    int      ageOfStudent; 
}; 

Я создаю объекты и хранить их в объекте групповой вектору, но у меня есть проблема, когда я хочу, чтобы напечатать их:

void Group::printAll (void) const 
{ 
    for (const auto & student : vectorOfStudents) 
    { 
    student . printAtributes (); // Line 54 
    cout << endl; 
    } 
} 

Вот функция, которая должна вызывать и печатать имя студента каждый раз:

void Student::printAtributes (void) 
{ 
    cout << "name: " << nameOfStudent << " | " << "age: " << ageOfStudent<< endl; 
} 

дает мне эту ошибку:

54:33: error: passing ‘const Student’ as ‘this’ argument of ‘void Student::printAtributes()’ discards qualifiers [-fpermissive] 
    student . printAtributes (); 
+0

Это происходит, если вы не храните вектор в классе? Сначала возьмите привычку, извлекая минимальный, но полный пример. –

ответ

1

Просто измените

void printAtributes (void); 

в

void printAtributes (void) const; 
          // ^^^^^ 

Как вы явно требуя его от константной ссылке

for (const auto & student : vectorOfStudents) 
    // ^^^^^^^^^^^^ 

функция должна быть объявлена ​​как вызываемая от const.

+0

О, спасибо, что раньше у меня было это, но это все еще давало мне ошибки, но я забыл изменить его и в классе. – kvway

+0

И явный 'const' требуется, так как' std :: begin() 'на' const std :: vector 'дает' const_iterator'. – Zeta

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