结构预先声明,未定义

cbib_cat 2010-12-30 09:43:49
我在头文件中,声明了一个结构,在cpp文件实现了该结构,头文件定义如下:

#ifndef _TEST_H
#define _TEST_H

#endif

struct myTest;

class testClass
{
int a;
myTest b;
// myTest *b;
};

我在类中,定义了一个结构变量,编译不能通过,说该结构未定义;换成指针类型就可以了。
在编译的时候,头文件不是仅仅展开,并不分配空间,为什么还需要该结构定义呢?
...全文
219 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Metrosexual 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luciferisnotsatan 的回复:]
因为此时还不知道 myTest多大,也就不能得出testClass有多大,编译器没法分配空间。
指针大小是固定的,所以没问题
[/Quote]
+1
cnlm2 2010-12-30
  • 打赏
  • 举报
回复
前置申明,不能申明对象
cbib_cat 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 arong1234 的回复:]

假如另外一个cpp(不是你定义结构的cpp)需要使用这个类型,它怎么知道myTest是什么?
而且,在以后需要分配空间的时候,你希望编译器再跑到你cpp里找定义,还是现在就记录定义信息,以后不再查找?虽然此时不需要分配空间,但是如果按照你设想的方法,每次需要分配空间时,编译器还是需要分析每个cpp文件,找到myTest的信息,这是非常非常没效率的。类型定义必须完整,这样才能使得编译器高效工作
……
[/Quote]恩,明白了大概!
arong1234 2010-12-30
  • 打赏
  • 举报
回复
假如另外一个cpp(不是你定义结构的cpp)需要使用这个类型,它怎么知道myTest是什么?
而且,在以后需要分配空间的时候,你希望编译器再跑到你cpp里找定义,还是现在就记录定义信息,以后不再查找?虽然此时不需要分配空间,但是如果按照你设想的方法,每次需要分配空间时,编译器还是需要分析每个cpp文件,找到myTest的信息,这是非常非常没效率的。类型定义必须完整,这样才能使得编译器高效工作
pengzhixi 2010-12-30
  • 打赏
  • 举报
回复
因为需要知道结构体的大小
luciferisnotsatan 2010-12-30
  • 打赏
  • 举报
回复
因为此时还不知道 myTest多大,也就不能得出testClass有多大,编译器没法分配空间。
指针大小是固定的,所以没问题
無_1024 2010-12-30
  • 打赏
  • 举报
回复
因为你没定义 怎么给b分配空间啊
如果是指针 确定一个指向就可以了 就是指针类型已知就可以了

64,691

社区成员

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

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