未定义的符号。 ld:找不到符号

一切工作除了这个未定义的符号错误:

bash-3.2$ make g++ -Wall -g solvePlanningProblem.o Position.o AStarNode.o PRM.o PRMNode.o Worl.o SingleCircleWorld.o Myworld.o RECTANGLE.o CIRCLE.o -o solvePlanningProblem `Undefined symbols: "Obstacle::~Obstacle()", referenced from: Myworld::~Myworld()in Myworld.o Myworld::~Myworld()in Myworld.o Myworld::~Myworld()in Myworld.o "RECTANGLE::RECTANGLE()", referenced from: Myworld::readObstacles(std::basic_istream<char, std::char_traits<char> >& in Myworld.o "CIRCLE::CIRCLE()", referenced from: Myworld::readObstacles(std::basic_istream<char, std::char_traits<char> >& in Myworld.o "typeinfo for Obstacle", referenced from: typeinfo for RECTANGLEin RECTANGLE.o typeinfo for CIRCLEin CIRCLE.o ld: symbol(s) not found collect2: ld returned 1 exit status make: *** [solvePlanningProblem] Error 1` 

这是一个奇怪的错误。 构造函数或析构函数有问题吗? 任何build议将有所帮助。

在所有构造函数和析构函数之后添加{}之后,错误已经被减less为:

 Undefined symbols: "vtable for Obstacle", referenced from: Obstacle::Obstacle()in Myworld.o "typeinfo for Obstacle", referenced from: typeinfo for RECTANGLEin RECTANGLE.o typeinfo for CIRCLEin CIRCLE.o ld: symbol(s) not found collect2: ld returned 1 exit status 

链接器找不到Obstacle类的析构函数。

它在另一个目标文件(也许是Obstacle.o)? 如果是这样,请将其添加到要链接的对象列表中。

它应该是类定义中的虚拟析构函数吗? 在这种情况下,确保你已经写好了

 virtual ~Obstacle() {} 

并不是

 virtual ~Obstacle(); 

第一个实现析构函数; 第二个声明它存在,但在其他地方实现。

好像你是错过了destrtructor的实现~Obstacle无论如何定义的~Obstacle ..

LD是链接器,这意味着一切都编译好,但当它开始将二进制文件链接到一个它不能找到你的代码中使用的障碍的析构函数。

 ~Obstacle() {} 

到你的类定义在.h文件,或者如果你喜欢只是定义它~Obstacle()并提供在.cpp文件中的实现为~Obstacle::Obstacle()

这可能是你宣布达佛但没有实现。 尝试将{}放在.h文件中,或者:

 Obstacle::~Obstacle() { } 

在cpp中。

它也看起来像RECTANGLECIRCLE中缺少的构造函数。

你错过了一个图书馆。 或者有一个坏的工具链(这取决于gcc的包含路径)。

谷歌蹲下..所以澄清你实际上正在建立让我们可以帮助你更多:)