功能已经在.OBJ定义(function already defined in .obj)

2019-08-17 07:25发布

据我了解,这个错误是由不正确地使用头卫士,当你有多个文件,包括相同的文件引起的。 在我而言,这是包括树这会导致错误:

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

我只是想知道,考虑到包括我描述的树,什么是正确的方式来得到这个正确编译?

我尝试使用#pragma once对文件Z,但没有奏效。 我也试过一次的#pragma在文件中的,这也没有工作。 最后,我想它在A和Z都,也没有工作。

Answer 1:

似乎你试图定义在头文件中的变量。 如果头文件被包含在多个源文件,将在每一个源文件中定义从而给你的错误。

相反,它声明extern ,然后在源文件中的一个定义。

所以在头文件:

extern ObjectType Object;

而在一个源文件:

ObjectType Object;


文章来源: function already defined in .obj