乘以定义的结构错误

时间:2011-03-13 02:55:15

标签: c++ visual-studio

我有一个主要的.cpp文件,其中包含所有内容。我需要打破代码,所以我创建了一个helper.h,我移动了所有的typedef,函数声明等。现在我试图移动一些函数从main .cpp到helper.cpp。我有一个全局叫mypoint * originalpoint [mypoint是我在helper.h中定义的结构]。我将它移动到helper.h并将其中一个函数放到helper中。 cpp。现在正在抛出这个错误: -

Error   1   error LNK2005: "struct mypoint * originalpoints" (?originalpoints@@3PAUmypoint@@A) already defined in Main.obj  Helper.obj  Stereo002
Error   2   fatal error LNK1169: one or more multiply defined symbols found C:\Documents and Settings\Raj\My Documents\Visual Studio 2008\Projects\Stereo002\Debug\Stereo002.exe    1   Stereo002

我不确定为什么说多重定义。我在helper.h中包含所有内容。我将helper.h包含在main.cpp和helper.cpp中。

2 个答案:

答案 0 :(得分:2)

您将变量的创建放入.h文件中,因此它将在.cpp文件中创建。

解决此问题的方法是在.h文件中将其声明为extern,并在其中一个.cpps中复制extern

答案 1 :(得分:1)

在这种情况下,由于您的标头包含在两个位置,因此编译器将在每次包含该变量时创建该变量的实例。当链接器接下来运行时,它会找到“originalpoint”的两个定义并抱怨。

Mark的回答是正确的 - 为了解决这个问题,你可以通过声明'extern'来指定变量为external linkage,这告诉链接器在其他地方寻找这个变量的声明(在其中一个cpp文件)。然后,您实际上在其中一个cpp文件中声明它。

值得确认的是,这确实是你想要的 - 一个变量在两个文件之间共享。由于它们最初是同一实现文件的一部分,因此这可能是期望的效果。