1

我在中定义了以下函数chess_location.h

inline chess_location operator+(chess_location lhs, const chess_coord& rhs);

然后,在chess_location.cpp

#include "chess_location.h"

chess_location operator+(chess_location lhs, const chess_coord& rhs) { 
  //function definition
}

然后在我main()的 in 中使用这个运算符main.cpp,如下所示:

#include "chess_location.h"
int main() {
  chess_location_B = chess_location_A + chess_coord;
}

但是,我收到一个链接器错误,提示找不到操作员:

error LNK2019: unresolved external symbol "class chess_location __cdecl operator+(class chess_location,class chess_coord const &)" (??H@YA?AVchess_location@@V0@ABVchess_coord@@@Z) referenced in function _main

在我看来,链接器没有将运算符的声明连接到定义,但我不确定为什么。我怀疑我const的 s 可能有问题。但是,如果我将运算符定义移至main.cpp,则一切都可以编译并正常工作。

知道这个错误来自哪里吗?

4

1 回答 1

7

如果operator +应该是内联的,那么你需要把定义放在头文件中。如果不打算内联,则将其放入 cpp 文件并从声明中删除“内联”。

于 2013-01-29T12:27:53.630 回答