这让我很头疼。
我有这个错误链接。
g++ -o node.o pathfinding.o prueba.o libmatrix.a -lm -lz -llog4cplus
Undefined symbols for architecture x86_64:
"operator<(Node const&, Node const&)", referenced from:
std::less<Node>::operator()(Node const&, Node const&) constin pathfinding.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [path] Error 1
在类Node的标题中,在类声明之外:
// Determine f_score in priority queue
//------------------------------------------
bool operator < (const Node &a, const Node &b);
// Determine f_score in priority queue
//------------------------------------------
bool operator > (const Node &a, const Node &b);
在源文件(Node.cpp)中,我有方法声明:
#include "node.hpp"
// Determine f_score in priority queue
//------------------------------------------
bool operator < (const Node &a, const Node &b)
{
return a.getf() > b.getf();
}
// Determine f_score in priority queue
//------------------------------------------
bool operator > (const Node &a, const Node &b)
{
return a.getf() < b.getf();
}
任何人都知道问题出在哪里。我正在使用OSX的g ++版本4.2.1。
提前致谢。
答案 0 :(得分:2)
您的命令有问题。 -o
选项用于设置输出文件。您正在将输出文件设置为node.o
,它正在写入您的目标文件。你的命令应该是:
g++ -o something node.o pathfinding.o prueba.o libmatrix.a -lm -lz -llog4cplus
但是你需要首先重新编译node.o
目标文件,因为你可能已经覆盖了它。