2016-03-11 162 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); 

    }; 

我不断收到此错误

'((*级)本) - >类::马丁' 不具有类类型

字符串常量前

期望标识符|

学生被定义在课前,所以它不应该有访问它的问题。 是什么导致了这种行为?我该如何解决它?

回答

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/

正如James Root在评论中指出的那样:

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