1

我一直在暂停使用 MSVC,并且隐约记得内联类成员函数没有问题。但是,当我这样使用 inline 关键字时:

//In header file
class A {
    public:
        inline void funcA(void);
};

//In cpp file
void A::funcA(void) {

}

我得到一个 LNK2019,未解析的符号(即使该函数与错误所说的完全匹配)。我尝试将标题和定义都标记为内联,并且发生了同样的事情。在尝试构建后,我还删除了 inline 关键字,并且错误一直存在,直到我清理解决方案,之后一切都构建好了 sans-inline。当我用谷歌搜索问题时,似乎没有人遇到同样的问题,这表明我遗漏了一些明显的东西......但它是什么?

4

2 回答 2

3

内联函数应始终在标题中定义。它不必在类定义中,但应该在标题中。如果你没有把它放在头文件中,包括 .h 文件在内的其他模块将无法看到定义并内联它......

供您参考,最新版本的 Visual C++ 具有链接时间代码生成功能,它允许编译器内联其他模块(= cpp 文件)中的函数,即使要内联的函数是在其他 .cpp 文件中定义的。但这是一个专有扩展,并且在不考虑inline关键字的情况下完成。便携的方式是使用inline并将其放在表头中。

于 2013-10-27T20:53:03.387 回答
1

一旦您将内联成员设为公开或受保护,您就应该将定义放在标题中。豁免是私有内联(没有任何朋友访问),如果它仅在源中使用。(可能需要清理来修复预编译的头文件)

于 2013-10-27T21:08:37.417 回答