2016-03-11 5 views
1

Я пытаюсь создать экземпляр класса внутри класса. Я объявил два класса = первыйСоздание экземпляра класса внутри класса

class Student{ 
public: 
    Student(string m,int g){ 
     name=m; 
     age=g; 
    } 
    string getName(){ 
     return name; 
    } 
    int getAge(){ 
     return age; 
    } 
private: 
    string name; 
    int age; 

}; 

И, во-вторых, где я хочу создать экземпляр студента.

class Class{ 
public: 

    Class(string n){ 
     name = n; 
    }; 
    string studentName(){ 
     return Martin.getName(); 
    } 
private: 
    string name; 
    Student Martin("Martin",10); 
    Student Roxy("Roxy",15); 

    }; 

я получаю эту ошибку

'((класс *) это) -> Class :: Martin' не имеет тип класса

ожидается идентификатор, прежде чем строковая константа |

Студент был деконструирован перед классом, поэтому у него не должно быть проблем с его доступом. В чем причина такого поведения? Как я могу это исправить?

ответ

3

инициализация члена должна быть сделана в вашем конструкторах список инициализации:

Class(string n) 
    : Martin("Martin",10) 
    , Roxy("Roxy",15) 
{ 
    name = n; 
}; 

private: 
    string name; 
    Student Martin; 
    Student Roxy; 

Некоторые больше информации о инициализации членов можно найти здесь: http://en.cppreference.com/w/cpp/language/initializer_list

И еще учебник как объяснение также может быть полезно вы: http://www.learncpp.com/cpp-tutorial/8-5a-constructor-member-initializer-lists/

Как писал Джеймс Рут в комментариях, а не:

private: 
    string name; 
    Student Martin("Martin",10); 
    Student Roxy("Roxy",15); 

вы можете написать

private: 
    string name; 
    Student Martin{"Martin",10}; 
    Student Roxy{"Roxy",15}; 

Но убедитесь, что вы компиляции кода с C++ 11 стандарта. В старых компиляторах вам может понадобиться добавить -std = C++ 11 в команду компиляции: g ++ -o foo -std = C++ 11 main.cpp

+1

Инициализация в классе вполне приемлема, но необходима использовать скобки вместо круглых скобок. –

+0

Вы абсолютно корректны для C++ 11, но вам нужно скомпилировать его с флагом -std = C++ 11 (по крайней мере, для старых компиляторов) – Goldfishslayer

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