以下是引用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;的声明而已,仍然没有定义,所以编译器就报那个错误信息咯。