我在 dll 中导出了一个类。并在该导出类中获得内联函数:
标题.h
class MODULE_EXPORT A
{
public:
int GetInt(){ return iSomeInt; }
};
当我将该头文件包含在一个单独的模块中时。我收到错误 LNK2005,这意味着:GetInt() 已经定义。
如果我将函数定义放在 .cpp 文件中。没有错误发生。
如果我在头文件中这样定义 GetInt 是内联函数,对吗?那么为什么重新定义链接错误?我使用的是 vc++ 编译器。 (Visual Studio 2010)。
编辑:
#pragma once
已经添加到头文件中。忘了说了。
最佳答案
本质上,头文件中的函数定义对每个编译单元都是可见的,并且它们会尝试编译它。
但是该函数已经在 dll 中定义了。
解决方案是按照您的说明将定义放在 cpp 文件中,或者使用 static 关键字,这样定义只对定义它的编译单元可见,而不是包含它的编译单元可见。
此外,内联函数只是编译器的性能提示,它可能不会内联它。对于此功能,鉴于它的简单性,我无法想象它们会带来任何性能优势,因此我建议将其移至 .cpp 文件中。
关于c++ - 内联函数重新定义链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30211635/