[求助]奇怪的类声明!

killcpp 2009-01-15 02:35:20
如此声明类,表示的是什么意思??
class CWinApp;

如下声明 CWinApp,编译通过
=====================================
#include <windows.h>

class CWinApp;

int main()
{

CWinApp * CWin;

return 0;
}
=====================================

如下声明编译失败
=====================================
#include <windows.h>

class CWinApp;

int main()
{

CWinApp CWin;

return 0;
}
=====================================
...全文
66 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyisnail 2009-01-15
  • 打赏
  • 举报
回复
from c++ primer:
可以声明一个类而不定义它:

class Screen; // declaration of the Screen class

这个声明,有时称为前向声明(forward declaraton),在程序中引入了类类型的 Screen。在声明之后、定义之前,类 Screen 是一个不完全类型(incompete type),即已知 Screen 是一个类型,但不知道包含哪些成员。


不完全类型(incomplete type)只能以有限方式使用。不能定义该类型的对象。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。


在创建类的对象之前,必须完整地定义该类。必须定义类,而不只是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样地,在使用引用或指针访问类的成员之前,必须已经定义类。

waizqfor 2009-01-15
  • 打赏
  • 举报
回复
定义指针只要有数据类型就可以
定义对象 需要有具体的数据定义才行 单单的一个class声明是不行的
yuzl32 2009-01-15
  • 打赏
  • 举报
回复
前置声明
fibbery 2009-01-15
  • 打赏
  • 举报
回复
对于复杂数据结构,如果声明为指针,只需要有数据类型的声明即可;
如果要声明变量,必须有数据类型的定义,这样,编译器才能知道如何给变量分配内存。
对于指针,编译器总是知道应该分配几个字节。
lbh2001 2009-01-15
  • 打赏
  • 举报
回复
其实和C语言里的
struct A
{
int i;
struct A *next;
};
差不多
lbh2001 2009-01-15
  • 打赏
  • 举报
回复
class CWinApp; //是个不完整声明,多用于前置声明
只要不设计类的实例就是合法的,类的指针不涉及实例,所以OK

64,654

社区成员

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

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