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中。
答案 0 :(得分:2)
您将变量的创建放入.h文件中,因此它将在.cpp文件中创建。
解决此问题的方法是在.h文件中将其声明为extern
,并在其中一个.cpps中复制extern
。
答案 1 :(得分:1)
在这种情况下,由于您的标头包含在两个位置,因此编译器将在每次包含该变量时创建该变量的实例。当链接器接下来运行时,它会找到“originalpoint”的两个定义并抱怨。
Mark的回答是正确的 - 为了解决这个问题,你可以通过声明'extern'来指定变量为external linkage,这告诉链接器在其他地方寻找这个变量的声明(在其中一个cpp文件)。然后,您实际上在其中一个cpp文件中声明它。
值得确认的是,这确实是你想要的 - 一个变量在两个文件之间共享。由于它们最初是同一实现文件的一部分,因此这可能是期望的效果。