错误与运算符方法链接

时间:2013-05-15 12:40:28

标签: c++ methods linker operators

这让我很头疼。

我有这个错误链接。

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。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您的命令有问题。 -o选项用于设置输出文件。您正在将输出文件设置为node.o,它正在写入您的目标文件。你的命令应该是:

g++ -o something node.o pathfinding.o prueba.o libmatrix.a -lm -lz -llog4cplus

但是你需要首先重新编译node.o目标文件,因为你可能已经覆盖了它。