在C ++中创建和使用标头

时间:2011-04-02 20:24:07

标签: c++ header-files

我有三个文件,add.h,add.cpp和test.cpp

add.h为一个类创建一个标题,它只是后来实现的骨架。

add.cpp包含add.h

中列出的类的实际代码

test.cpp包含main方法,并在add中声明该类的实例并使用它的一些方法。

但是,我在编译时遇到了麻烦。在add.h中,我有#DEFINES来防止多次写入头文件,而在add.cpp和test.cpp中我有add.h包含但是当我尝试使用行编译时

g++ test.cpp -o test

我收到有关add.h中类对象和方法的未定义引用的错误。我一直在搜索谷歌如何编译或运行这个,但到目前为止没有任何帮助,StackOverflow可以帮助我吗?

编辑:对不起,我应该还包括我尝试了g ++ test.cpp add.cpp -o test,它也没有用,产生相同的结果错误。

4 个答案:

答案 0 :(得分:5)

分别编译每个文件,然后链接:

g++ -Wall -c test.cpp
g++ -Wall -c add.cpp
g++ -o test test.o add.o

或者在一个命令中编译和链接所有文件:

g++ -Wall -o test test.cpp add.cpp

答案 1 :(得分:2)

运行g++ test.cpp add.cpp -o test

编辑:在此处复制我的评论

您需要了解为什么您的初始方法无效。当您从test.cpp中的add.h头引用内容时,编译器会查找定义,但找不到它们,因为它们位于add.cpp中,并且您没有将它传递给编译器。编译器不能仅仅因为你在test.cpp中包含add.h而猜测它应该在add.cpp文件中查找定义。

答案 2 :(得分:2)

运行g++ test.cpp add.cpp -o test

g++ -c add.cpp -o add.o
g++ -c test.cpp -o test.o
g++ test.o add.o -o test

-c标志告诉gcc只是编译而不是链接 前两个步骤在目标文件中编译1 cpp(编译单元) 最后一步将它们链接到一个可执行文件

你的实际问题来自这样一个事实:当你编译test.cpp时,它引用了一些未定义的符号。 如果您只是编译(-c标志)那很好,下一步是链接那些包含缺失符号的对象文件。

答案 3 :(得分:1)

你需要

 g++ test.cpp app.cpp -o myTest

由于app.cpp包含test.cpp使用的代码。