gpt4 book ai didi

c++ - 对已定义函数的 undefined reference

转载 作者:行者123 更新时间:2023-11-30 02:01:33 26 4
gpt4 key购买 nike

所以大概我正在做一些非常愚蠢的事情并且只是捕获它,但我不断得到一个 undefined reference 到一个我最明确定义的函数。在我的一个 .cpp 文件中,我使用以下命令:

#include "MVec.h"
...
MVec ans;
...
for(int i = 0; i < 3; i++)
ans[i] = ...

在 MVec.h 中,我有:

class MVec {
...
inline double & operator[](const int i);
inline const double & operator[](const int i) const;
...
};

最后,在 mvec.cpp 中,我有:

inline double & MVec::operator[](const int i) {
#ifdef CHECK_BOUNDS
if(i < 0 || i >= 3)
throw("Subscript out of bounds");
#endif

return vec[i];
}

inline const double & MVec::operator[](const int i) const {
#ifdef CHECK_BOUNDS
if(i < 0 || i >= 3)
throw("Subscript out of bounds");
#endif

return vec[i];
}

然而,不知何故,当我编译这两个 .cpp 文件并尝试链接它们时

g++ atommanager.cpp -o atommanager.o
g++ mvec.cpp -o mvec.o
g++ atommanager.o mvec.o -o gpumd

我总是得到一个错误:

atommanager.cpp:(.text+0x76): undefined reference to `MVec::operator[](int)'

这里,atommanager.cpp 是我提到的第一个.cpp 文件的名称。

最佳答案

定义函数 inline 不提供外部可见的定义:该定义仅在定义 inline 函数的翻译中可见(我认为仅适用于在 inline 定义之后调用,除非该函数也被声明为 inline)。解决该问题的最简单方法是删除 inline。或者,您需要在 header 中定义函数。

关于c++ - 对已定义函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com