C++ inline关键字导致Visual C+;中的链接器错误2019+;

C++ inline关键字导致Visual C+;中的链接器错误2019+;,c++,visual-studio,visual-c++,inline,C++,Visual Studio,Visual C++,Inline,我已经暂停使用MSVC,并且模糊地记得内联类成员函数没有问题。但是,当我使用inline关键字时: //In header file class A { public: inline void funcA(void); }; //In cpp file void A::funcA(void) { } 我得到一个LNK2019,未解析的符号(即使函数与错误所说的完全匹配)。我尝试将标题和定义都标记为内联,但同样的情况也发生了。在尝试构建之后,我还删除了inline关键

我已经暂停使用MSVC,并且模糊地记得内联类成员函数没有问题。但是,当我使用inline关键字时:

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

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

}

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

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


您的信息,VisualC++的最新版本具有链接时间代码生成,允许编译器在其他模块(=CPP文件)中内联函数,即使在其他.CPP文件中定义了内联函数。但是这是一个专有的扩展,并且不考虑

inline
关键字。可移植的方法是使用
内联
并将其放在标题中。

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


您的信息,VisualC++的最新版本具有链接时间代码生成,允许编译器在其他模块(=CPP文件)中内联函数,即使在其他.CPP文件中定义了内联函数。但是这是一个专有的扩展,并且不考虑

inline
关键字。可移植的方法是使用
内联
并将其放在标题中。

一旦将内联成员公开或受保护,则应将定义放在标题中。如果豁免仅在源代码中使用,则它是一个私有内联(没有任何好友访问)。(修复预编译头可能需要清除)

一旦将内联成员公开或受保护,应将定义放入头中。如果豁免仅在源代码中使用,则它是一个私有内联(没有任何好友访问)。(可能需要清理以修复预编译的标题)

funcA是否在其定义的翻译单元之外的其他翻译单元中使用?如果是这样,这就是导致错误的原因,因为编译器需要知道定义,以便用函数体替换调用。每个翻译单元中都需要一个相同的定义,因此它可能应该放在标题中,而不是cpp文件funcA在定义它的另一个翻译单元中使用?如果是这样,这就是导致错误的原因,因为编译器需要知道定义,以便用函数体替换调用。每个翻译单元中都需要一个相同的定义,因此它可能应该放在标题中,而不是放在cpp文件中以供将来参考,如果我有一个非常长的公共函数,我想内联,因为它只使用一次,该怎么办?我应该在标题中定义它,还是根本不内联它?如果它在定义它的类之外使用,它必须在标题中。@NmdMystery您可以将它放在类声明之后,这样人们就可以在没有大方法的情况下看到该类。如果上面显示的所有代码都在标题中,那就好了。作为将来的参考,如果我有一个非常长的公共函数,我想内联它,因为它只使用一次呢?我应该在标题中定义它,还是根本不内联它?如果它在定义它的类之外使用,它必须在标题中。@NmdMystery您可以将它放在类声明之后,这样人们就可以在没有大方法的情况下看到该类。如果上面显示的所有代码都在标题中,那么就可以了。