根据我的理解,当您有多个文件(包括同一文件)时,如果没有正确使用标题保护,则会导致此错误。就我而言,这是导致错误的包含树:
File A includes Z, which contains the functions I need. File B includes A, and file C includes A.
没有任何#pragma once
,程序会给出一堆相同错误的变体:
blahblah.obj: error LNK2005: class some::namespace::ObjectType Object already
defined in dialogDlg.obj
我只是想知道,鉴于我描述的包含树,正确编译它的正确方法是什么?
我尝试在文件Z上使用#pragma once
,但这不起作用。我还在文件A上尝试了#pragma一次,但也没有用。最后我在A和Z上都尝试过,也没用。
答案 0 :(得分:12)
您似乎正在尝试在头文件中定义变量。如果该头文件包含在多个源文件中,则将在每个源文件中定义,从而为您提供错误。
而是将其声明为extern
,然后在其中一个源文件中定义。
所以在头文件中:
extern ObjectType Object;
在源文件中:
ObjectType Object;