c++ - 内联函数重新定义链接错误

标签 c++

我在 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/

相关文章:

c++ - 为什么我不能为位于基类中的类中的类型起别名?

C++ 从 const 指针调用引用函数

c++ - 在 C++ 中创建动态 vector

c++ - 为什么C++类可以等于一个变量

c++ - 为什么他们想要一个 'unsigned char*' 而不仅仅是一个普通的字符串或 'char*'

c++ - scanf() 导致奇怪的结果

java - JNI GetMethodID 调用时出现未决异常 java.lang.ClassNotFoundException

c++ - 在虚函数表中找不到派生类的虚函数地址

c++ - 使用基于此标志的条件语句是否比添加更多代码行更有效?

c++ - 在创建此函数以从 C++ 中的单链表搜索元素时,我在哪里犯了错误?