注册 登录
编程论坛 C++教室

第一次来,问一个类在头文件中声明的问题

xyc294753618 发布于 2012-07-29 07:36, 1000 次点击
久闻此论坛nb,小弟问个初级问题

在aa.h中我声明  class AA;

在aa.cpp 中我 class AA { .....类的变量,函数的声明以及定义}

在 bb.cpp 中我#include "aa.h"  但我创建 AA test = new AA(); 时说AA 没有定义, 这是为什么, 我在.h中声明了,并在 aa.cpp 中定义了啊
8 回复
#2
lonmaor2012-07-29 09:50
aa.cpp中include "aa.h"了么?
#3
有容就大2012-07-29 09:56
顶LS
#4
liudw22012-07-29 11:43
加顶,没包含头文件怎么能定义类啊。。。
#5
pangding2012-07-29 11:54
可能就是 2楼 指出的问题。
不过习惯上,类的定义也放在 .h 里。静态成员呀和可以内联的成员函数也一并在 .h 里实现了。然后其它的成员函数在 .cpp 里实现。(和 c 的习惯差不多,就是成员函数也在 .h 里声明好,然后 .cpp 实现)
#6
yupeisx2012-07-30 11:07
这要看你创建AA类的方式,要是在工程中右击,NEW CLASS 的就不存在没有包含的问题,如果是手动的就有可能就是二楼说的问题。
#7
小小菜鸟蛋2012-08-05 12:11
2L正解~~
#8
lyp8809242012-08-05 12:50
以下是引用小小菜鸟蛋在2012-8-5 12:11:53的发言:

2L正解
上一层声明,下一层就得包含进去了 又学到新东西了
#9
TonyDeng2012-08-05 12:59
以下是引用xyc294753618在2012-7-29 07:36:42的发言:

久闻此论坛nb,小弟问个初级问题
 
在aa.h中我声明  class AA;
 
在aa.cpp 中我 class AA { .....类的变量,函数的声明以及定义}
 
在 bb.cpp 中我#include "aa.h"  但我创建 AA test = new AA(); 时说AA 没有定义, 这是为什么, 我在.h中声明了,并在 aa.cpp 中定义了啊

当然是没有定义啦。你在aa.h中的class AA只是声明了存在这么一个类,但没有定义实现代码,这个代码在aa.cpp中,但bb.cpp与aa.cpp是两个不同的并行模块,两者没有关联,你只#include "aa.h",也不过是宣布将要使用class AA,但编译器仍然找不到这个类的实现代码,它不会跨模块到aa.cpp中去找。

归根结底,你这个类的使用法是错的。正确的做法,是aa.cpp就是aa.h(原先的那个删掉,把aa.cpp改名为aa.h),然后在bb.cpp中#include "aa.h"。#include的作用,是把引用的文件内联到本模块,亦即把整个aa.h的内容嵌入到bb.cpp中。你用这个本质,看一下原先的做法:bb.cpp中#include "aa.h"之后,只不过是多了一个class AA;的声明而已,仍然没有定义,所以编译器就报那个错误信息咯。
1