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

标签 c++

所以大概我正在做一些非常愚蠢的事情并且只是捕获它,但我不断得到一个 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/

相关文章:

c++ - 为什么我会收到错误的文件描述符错误?

c++ - 如何在具有多个成员的自定义对象的 vector 上使用查找

c++ - dbus/dbus.h 在构建到 arm 时没有这样的文件或目录

c++ - 不合格的名称查找

编译时的 C++ 展开循环

c++ - 如何测试共享对象/共享库是否已正确编译?

c++ - "dereferencing"指针是什么意思?

c++ - 如何从输出迭代器中获取值类型?

c++ - 从两个 map 创建一个 set_difference vector

c++ - 在 Visual C++ 中使用时 curl 错误