10

据我了解,此错误是由于当您有多个文件(包括同一个文件)时未正确使用标头保护引起的。就我而言,这是导致错误的包含树:

File A includes Z, which contains the functions I need. File B includes A, and file C includes A.

没有任何#pragma once's,程序给出了相同错误的一堆变体:

blahblah.obj: error LNK2005: class some::namespace::ObjectType Object already 
    defined in dialogDlg.obj

我只是想知道,鉴于我描述的包含树,正确编译它的正确方法是什么?

我尝试#pragma once在文件 Z 上使用,但没有奏效。我还在文件 A 上尝试过 #pragma 一次,但也没有用。最后我在A和Z上都试过了,也没有用。

4

1 回答 1

13

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

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

所以在头文件中:

extern ObjectType Object;

在源文件中:

ObjectType Object;
于 2013-03-04T14:31:30.013 回答