据我了解,此错误是由于当您有多个文件(包含同一文件)时未正确使用标头防护而引起的。就我而言,这是导致错误的包含树:
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 上,但这不起作用。我还在文件 A 上尝试过 #pragma 一次,但这也不起作用。最后我在A和Z上都尝试了,也不起作用。
看来你正在尝试define头文件中的变量。如果该头文件包含在多个源文件中,它将在每个源文件中定义,从而给出错误。
Instead declare it as extern
然后在源文件之一中定义。
所以在头文件中:
extern ObjectType Object;
在源文件中:
ObjectType Object;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)