函数已在.obj中定义

时间:2013-03-04 14:28:44

标签: c++ object header linker include

根据我的理解,当您有多个文件(包括同一文件)时,如果没有正确使用标题保护,则会导致此错误。就我而言,这是导致错误的包含树:

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上都尝试过,也没用。

1 个答案:

答案 0 :(得分:12)

您似乎正在尝试在头文件中定义变量。如果该头文件包含在多个源文件中,则将在每个源文件中定义,从而为您提供错误。

而是将其声明extern,然后在其中一个源文件中定义。

所以在头文件中:

extern ObjectType Object;

在源文件中:

ObjectType Object;