为什么错误?!

zf0579 2003-04-02 08:28:17
设类CA的头文件放在a.h中
#include "a.h"
class b: public c
{
public:
b(CA *pa);
b();
.......
};
编译后
error C2629: unexpected 'class b ('
error C2238: unexpected token(s) preceding ';'

如果这样
class CA;
class b: public c
{
public:
b(CA *pa);
b();
.......
};
就编译通过,为什么啊?!
...全文
14 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
robertnet 2003-04-03
  • 打赏
  • 举报
回复
没有你想的这么简单,要先声明,然后才可以用的

#include <iostream>
using namespace std;
class CA;
class c
{
public:
c();
};
class b: public c
{
public:
b(CA *pa);
b();
};
;
int main()
{
return 0;
}
编译通过,你可以看一下。
alan118 2003-04-02
  • 打赏
  • 举报
回复
CA如果声明指针第一种应该可以(我经常这样,在vc6里,可能这也依赖编译器),如果不是声明指针,那么肯定不可以,应该在CA.h里定义类CA.
wyqiang 2003-04-02
  • 打赏
  • 举报
回复
我想我是不知道
zf0579 2003-04-02
  • 打赏
  • 举报
回复
可能是因为在a.h中
#include "b.h"
class a
{
}
在b.h中就应该
class a;
class b
{
}
zf0579 2003-04-02
  • 打赏
  • 举报
回复
我试过啦 如果是b(CA a)也是可以编译通过的 呵呵。
zf0579 2003-04-02
  • 打赏
  • 举报
回复
to andy_VC:
你回答了问题的一半,能否比较详细的解释呢?
还有 为什么#include "a.h"就会出错呢?
在a.h内声明CA类。
million 2003-04-02
  • 打赏
  • 举报
回复
你的头问可能并没有被编译。
在《effective c++中》,有一条就是尽量减少对编译的依赖性
第二中是值得鼓励的写法。
andy_vc 2003-04-02
  • 打赏
  • 举报
回复
不是吧!如果Class CA在头文件a.h中定义的话,这种错误不可能。
class CA;
class b: public c
{
public:
b(CA *pa);
b();
.......
};
这样写就为什么对了呢?应为你前向声明了class CA,而且在用CA定义了一个指针,而不是对象,如果是对象的话(如 CA a)肯定也编译不过去。
ww2003 2003-04-02
  • 打赏
  • 举报
回复
因为CA没有声明,编译器不知CA表示何种数据类型报错

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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