我有三个文件,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,它也没有用,产生相同的结果错误。答案 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
使用的代码。