2012-12-30 110 views
-1

可能重复:
Undefined reference toC++编译和运行在Linux上

在我的目录,我有:

main.cpp 
tree.cpp 
tree.h 

我已经包含在main.cpp中tree.h中

#include "tree.h" 

然后在我的主要功能我写

tree* t=new tree() 

对于编译我会做

g++ main.cpp 

,但我有错误

undefined reference to `tree::tree()' 

什么问题?

+1

无关问题的方法:尽量避免'树* T =新树()',这是Java的杂交,并没有必要,也没有效率也没有内存 - 安全。只是让它成为'树'; – leftaroundabout

+0

哦,非常感谢。 – Sara

回答

7

你需要编译和链接树源代码,以及:

$ g++ -c -o tree.o tree.cpp 
$ g++ -o test main.cpp tree.o 

运行应用程序:

$ ./test 
+0

你能解释一下上面的代码是做什么的吗?我是新手。 – Sara

+3

你需要一个好的gcc手册http://pages.cs.wisc.edu/~beechung/ref/gcc-intro.html – billz

+1

@sweet基本上,会发生什么它,你需要做的目标文件的树都和主要文件。第一行创建用于tree.cpp对象文件,所述第二线被创建的main.cpp对象文件,并将其链接到用于tree.cpp对象文件,然后创建可执行文件。 – Annabelle

2

您可能希望创建自己应该是​​一个make文件。 make文件会自动编译多个文件程序。

例如,您可以创建一个包含billz建议行的文件“makefile”。

all: 
    g++ -c -o tree.o tree.cpp 
    g++ -o test main.cpp tree.o 

然后,从生成文件的文件夹中的终端运行make将执行all部分。

有关生成文件的更多信息,请参阅http://www.cs.bu.edu/teaching/cpp/writing-makefiles/

我没有测试上面的代码,它可能是一些调整是必要的。

+0

但我建议有一个更好的'makefile',与真正的依赖和*作*变量。 –

+0

当然!以上仅作为例子给出。该链接提供了大量关于如何创建更好的生成文件的信息。 – Sam

0

把头文件保护,像这样

#ifndef NAME_H 
#define NAME_H 

//your codes 

#endif 
+0

我这样做了,谢谢。 – Sara

+0

能工作吗?我之前也有这个问题,并且解决了它。 请注意,只要两者相同,NAME_H就可以是任何东西。 – Cache

+0

这不是我的问题。我的问题是链接g ++中的对象 – Sara