一个小小的问题,关于次序的,有点不解

traceless 2009-08-12 09:32:30
class CA
{
public:
CA(void){cout<<"ca"<<endl;}
};

/* 把class CB提到这里可以运行通过。难道次顺也有关*/

class CC
{
public:
CA m_ca;
CB m_cb;
CC(void){cout<<"cc"<<endl;}
};

class CB
{
public:
CB(void);
CB(void){cout<<"cb"<<endl;}
};

int main(void)
{
CC mcc;
}


1 如果类在不同的文件呢,难道头文件的顺序也要讲究?

2 怎样解释编译器在编译以上代码的关系或者次序
...全文
66 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mstlq 2009-08-12
  • 打赏
  • 举报
回复
class CA
{
public:
CA(void){cout<<"ca"<<endl;}
};

class CB
{
public:
CB(void);
CB(void){cout<<"cb"<<endl;}
};

class CC
{
public:
CA m_ca;
CB m_cb;//CB是什么东西呢?编译器一看就觉得眼熟,CB不就是上两行定义的那个class吗?
//ok,编译器知道怎么做了……
CC(void){cout<<"cc"<<endl;}
};



int main(void)
{
CC mcc;
}
mstlq 2009-08-12
  • 打赏
  • 举报
回复
遵循先声明,后使用的原则

class CA
{
public:
CA(void){cout<<"ca"<<endl;}
};

/* 把class CB提到这里可以运行通过。难道次顺也有关*/

class CC
{
public:
CA m_ca;
CB m_cb;//编译器看到这里时,傻眼了,它不知道CB是什么东西,不知道一个CB要占多少字节的内存空间
//这时候他就不知道需要分配多少内存才能容得下一个CC类了,怎么办呢?只好报错了……
CC(void){cout<<"cc"<<endl;}
};

class CB
{
public:
CB(void);
CB(void){cout<<"cb"<<endl;}
};

int main(void)
{
CC mcc;
}
mstlq 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lijiepub 的回复:]
遵从一个原则:先声明,后使用。
你在class CC类中将class CB定义成员变量,而此时class CB还未声明,编译器当然要报错了。其他地方不要动,在class CC前面加上:classic CB;就ok了
[/Quote]
如果只是前置声明,还是会有问题的,因为没看到CB的具体声明,编译器还是无法确定CC的size^_^
遥望那些年 2009-08-12
  • 打赏
  • 举报
回复
C语言
先声明 后使用
没有声明过的,当然就不能使用
e21124215 2009-08-12
  • 打赏
  • 举报
回复
声明要是都放 在一个文件中,就要有先后,放在多文件中就只要调用头文件了。
herry-Li 2009-08-12
  • 打赏
  • 举报
回复
遵从一个原则:先声明,后使用。
你在class CC类中将class CB定义成员变量,而此时class CB还未声明,编译器当然要报错了。其他地方不要动,在class CC前面加上:classic CB;就ok了
traceless 2009-08-12
  • 打赏
  • 举报
回复
class CA
{
public:
CA(void){cout < <"ca" < <endl;}
};

/*

把class CB提到这里可以运行通过。难道次顺也有关


*/

class CC
{
public:
CA m_ca;
CB m_cb;
CC(void){cout < <"cc" < <endl;}
};

class CB
{
public:

CB(void){cout < <"cb" < <endl;}
};

int main(void)
{
CC mcc;
}
traceless 2009-08-12
  • 打赏
  • 举报
回复
class CA
{
public:
CA(void){cout<<"ca"<<endl;}
};

/*

把class CB提到这里可以运行通过。难道次顺也有关


*/

class CC
{
public:
CA m_ca;
CB m_cb;
CC(void){cout<<"cc"<<endl;}
};

class CB
{
public:

CB(void){cout<<"cb"<<endl;}
};

int main(void)
{
CC mcc;
}
traceless 2009-08-12
  • 打赏
  • 举报
回复
上面的代码,有个小失误
class CB
{
public:
CB(void){cout<<"cb"<<endl;}
};


64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧