我一直处于使用MSVC的中断,并且依稀记得在列出类成员函数时没有问题。但是,当我使用inline关键字时:
//In header file
class A {
public:
inline void funcA(void);
};
//In cpp file
void A::funcA(void) {
}
我得到一个LNK2019,未解析的符号(即使该函数完全匹配错误所说的缺失)。我已经尝试将标题和定义标记为内联,同样的事情发生了。我在尝试构建之后也删除了inline关键字,并且错误仍然存在,直到我清理解决方案,之后所有内容都构建了精细的无内联。谷歌解决这个问题似乎没有人有同样的问题,这表明我错过了一些明显的事情......但是它是什么?
答案 0 :(得分:3)
应始终在标题中定义内联函数。它不必在类定义中,但它应该在标题中。如果你没有把它放在标题中,包括.h文件在内的其他模块将无法看到定义并将其内联....
为了您的信息,最新版本的Visual C ++具有链接时间代码生成,允许编译器内联其他模块(= cpp文件)中的函数,即使要在其他.cpp文件中定义内联函数。但这是一个专有扩展,并且不考虑inline
关键字。可移植的方法是使用inline
并将其放在标题中。
答案 1 :(得分:1)
只要您将内联成员设为公共或受保护,就应该将该定义放在标题中。如果仅在源中使用,则免除是私有内联(没有任何朋友访问)。 (可能需要清理以修复预编译的头文件)