我在VS2015上工作。
我有一个包含一些文件和A
的C ++项目MyClass.h
。它是用/clr
标志构建的。
我还有另一个C ++控制台项目B
,它也是用/clr
标志构建的。 B
的{{1}}具有以下内容:
B.cpp
我可以成功构建项目//B.cpp
#include "MyClass.h"
void main()
{
MyClass* obj = new MyClass();
}
。但是,当我将项目B
添加为项目A
的引用(右键单击->添加引用)时,突然得到B
的类,该类在项目{{1 }}。
如何添加引用会导致此类错误?
UPDATE1
所有头文件都具有“头保护”。
UPDATE2
我认为redefinition error
是控制台,而A
是静态库。但是,已经很晚了,我没有注意到我同时创建了ProjectA
和ProjectB
作为控制台应用程序。
我知道如果ProjectA
是dll,则需要导出MyClass,以便可以在ProjectB
中使用它。该示例可能很愚蠢,但是由于我是错误地获得了此信息,所以我仍然想了解为什么在这种情况下会出现重定义错误。我已将测试上传到here。
ProjectB
引用了ProjectA
。
ProjectA
如果我删除对ProjectB
的引用,或者我注释掉//ProjectA.cpp
#include "MyHeader.h"
int main()
{
return 0;
}
//ProjectB.cpp
#include "MyHeader.h"
//MyHeader.h
#pragma once
public enum class MyClass : int
{
};
,我将不再收到重定义错误。