如何使用带参数的对象作为类成员

leon 2008-02-25 05:10:03
看如下示例:
class CStudent
{
int m_age;
CStudent(int age = 16)
{
m_age = age;
}
}
class CClass
{
CClass()
{

}
private:
CStudent m_student1;
CStudent m_student2(10); // 本意定义一个age为10的对象
// 错误error C2059: syntax error:’constant’
}

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

...全文
218 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon 2008-02-25
  • 打赏
  • 举报
回复
对哦!!
谢谢了哈
hityct1 2008-02-25
  • 打赏
  • 举报
回复
放在初始化列表中,如下:

class CClass
{
public:
CClass():m_student2(10);
{

}
private:
CStudent m_student1;
CStudent m_student2;
}

如6楼所说。
leon 2008-02-25
  • 打赏
  • 举报
回复
遇到的问题是,要在一个类里用一个排序表COrderTable<T, K> m_arrayFileLog; // the array of record.
但是我想在创建这个表对象的时候能够控制构造的表的大小(这个大小是在COrderTable的构造函数里起作用的),但是感觉使用对象指针,在构造时new出这个对象比较麻烦,所以希望能找到更简便的方法。
leon 2008-02-25
  • 打赏
  • 举报
回复
oo 看的很仔细哈~ 谢谢!!
刚刚遇到这么个问题 所以大体写了上面的例子 自己也没有编译 对不起了

更改下,
class CStudent
{
public:
CStudent(int age = 16)
{
m_age = age;
}
private:
int m_age;
};
class CClass {
public:
CClass()
{

}
private:
CStudent m_student1;
// CStudent m_student2(10); // 本意定义一个age为10的对象
// 错误error C2059: syntax error:’constant’
};


int main(int argc, char* argv[])
{
CClass a;
return 0;
}

另外, gccli 的方法试过 不行。
oo 2008-02-25
  • 打赏
  • 举报
回复
BTW: 两个class里都没有public的东东,编译有问题
oo 2008-02-25
  • 打赏
  • 举报
回复
CClass() : student2(10)
{

}
gccli 2008-02-25
  • 打赏
  • 举报
回复
实现在类外就可以了,如:

class   CStudent 
{
int m_age;
CStudent(int age);
}

CStudent::CStudent(int age = 10){
:m_age(age)
{}
白乔 2008-02-25
  • 打赏
  • 举报
回复
不能让成员对象带上参数,但是并不是因为它的内存无法确定
类都定义好了,内存当然可以确定
只不过该对象还没有初始化而已。
Supper_Jerry 2008-02-25
  • 打赏
  • 举报
回复
声明一个带参数的成员变量是不可能的 的确。类定义的时候不分配内存。
taodm 2008-02-25
  • 打赏
  • 举报
回复
楼主啊,你就找本好点的教材吧,
找“初始化列表”
leon 2008-02-25
  • 打赏
  • 举报
回复
现在我的解决的办法是这样的:
1. 定义一个CStudent的指针,在CClass的构造函数中,定义student2,在构造函数中实例化是没有问题的。
class CClass
{
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);
class CStudent
{
int m_age;
CStudent(int age = 16)
{
m_age = age;
}
void SetAge(int age)
{
m_age = age;
}
}
class CClass
{
CClass()
{
m_student2.SetAge(10); // 设置age
}
private:
CStudent m_student1;
CStudent m_student2; //
}

不知道是否有更好的解决方法,希望高手指点~~
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-02-25 05:10
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下