看如下示例:
class CStudent

...{
public:
CStudent(int age = 16)

...{
m_age = age;
}
class CClass

...{
class CStudent

...{
public:
CStudent(int age = 16)

...{
m_age = age;
}
void SetAge(int age)

...{
m_age = age;
}
class CClass

...{
public:
CClass():m_student2(10); // 参数赋值

...{

}
private:
CStudent m_student1;
CStudent m_student2;
}









private:
int m_age;
}
class CClass

...{




lpublic:
CClass()

...{
}
private:
CStudent m_student1;
CStudent m_student2(10); // 试图声明一个m_age = 10的成员
// 错误error C2059: syntax error:’constant’
}










如上例,要想在类CClass中使用一个带参数的对象m_student2,以上的定义方式是错误的。
语法上说,编译器把这个CStudent m_student2(10);当成了函数声明,报告错误:error C2059: syntax error:’constant’
从类定义的角度来看,定义成员变量时并不会实例化该变量,没有内存分配,但是CStudent m_student2(10);这种写法也意味着实例化一个对象,所以是不允许的。那么,这也意味着直接声明一个带参数的成员变量是不可能的,不知道这种理解对不对?
现在的解决的办法:
1. 定义一个CStudent的指针,在CClass的构造函数中,定义student2,在构造函数中实例化是没有问题的。



public:
CClass()

...{
m_pStudent2 = new CStudent(10); // 实例化
}

~CClass()...{
delete m_pStudent2; // ??不知道这里是不是必须delete
// 如果不写CClass对象失效后 会自动释放吗?
}
private:
CStudent m_student1;
CStudent m_pStudent2; //定义指针
}
















2. 在CStudent中加入SetAge()方法,CClass中定义CClass m_student2,然后在CClass的构造函数中调用m_student2.SetAge(10);



public:










private:
int m_age;
}
class CClass

...{




public:
CClass()

...{
m_student2.SetAge(10); //
}
private:
CStudent m_student1;
CStudent m_student2; //
}









不知道是否有更好的解决方法,希望高手指点~~
新求的一中写法














感觉是最合适的写法了。