gpt4 book ai didi

c++ - 函数的 LNK 2005 链接错误,但不是 Visual Studio 2010 中的类

转载 作者:行者123 更新时间:2023-11-30 01:25:55 25 4
gpt4 key购买 nike

我现在正在构建一个 C++ DLL 库。今天我遇到了一个令人困惑的问题:在这个库中我可以定义类但不能定义函数。更具体地说,我给出以下代码来说明我的问题:

namespace fundamental
{

class Tree
{
public:
Tree() {};
~Tree() {};
int x;
};

/*int anyfunction()
{
return 1;
}*/

}

上面的定义在头文件中,这个文件会被其他文件调用。我的问题是,如果我注释函数部分 (int anyfunction()) 一切都很好,但是如果我添加这个函数,我会得到以下错误:

page_analysis.obj : error LNK2005: "int __cdecl fundamental::anyfunction(void)" (?anyfunction@fundamental@@YAHXZ) already defined in geo_box.obj
1>pa_region_properties.obj : error LNK2005: "int __cdecl fundamental::anyfunction(void)" (?anyfunction@fundamental@@YAHXZ) already defined in geo_box.obj

我的问题是为什么我只会为函数而不是类收到 LNK2005 错误。有什么想法吗?

最佳答案

如果您在头文件中定义某些内容,那么该定义将在包含该头文件的任何翻译单元(粗略地说,每个源文件)中重复。有时,多个定义是错误的。

可以在多个翻译单元中定义类,只要定义相同即可;实际上,它们必须在使用它们的任何翻译单元中定义。

函数通常不能,但您可以通过声明 inline 来允许它:

inline int anyfunction() {return 1;}

或者您可以将定义移动到单个源文件中,并且只在 header 中声明它:

// header
namespace fundamental {
int anyfunction();
}

// source file
int fundamental::anyfunction() {return 1;}

关于c++ - 函数的 LNK 2005 链接错误,但不是 Visual Studio 2010 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com