У меня есть собственная библиотека C ++ (назовем ее CoreLib.dll), и она предоставляет два класса:
У меня есть оболочка CLI / C ++ (назовем ее CoreWrapper.dll), которая позволяет проектам .NET создавать объекты Core
и Atom
:
- CoreDotNet.h
- AtomDotNet.h (включая Atom.h и CoreDotNet.h)
Когда я компилирую CoreWrapper, компилируется только CoreDotNet.h
, а AtomDotNet.h
игнорируется. Если я хочу скомпилировать AtomDotNet.h
, тогда я должен включить его в CoreDotNet.h
, но это вызывает ошибку компилятора в CoreDotNet.h
:
error C2011: 'CoreWrapperNS::CoreDotNet' : 'class' type redefinition
Вот некоторый основной код, который представляет то, что я делаю:
#pragma once // <-- should protect from class type redefinition
#include "Core.h"
//#include "AtomDotNet.h" // uncommenting causes compiler error C2011
using namespace CoreNS;
namespace CoreWrapperNS
{
public ref class CoreDotNet
{
public:
// Allows users to instantiate a core object
CoreDotNet();
CoreDotnet(Core* core);
//... destructor follows
};
}
Вот файл AtomDotNet.h:
#pragma once // <-- should protect from class type redefinition
#include "Atom.h"
#include "CoreDotNet.h"
namespace CoreWrapperNS
{
public ref class AtomDotNet
{
private:
Atom* _atom;
CoreDotNet^ _core;
public:
AtomDotNet()
{
// The atom allows users to instantiate an atom with a core
// and to get a reference to the core of the given atom.
Core* core = new Core();
_atom = new Atom(core);
_core = gcnew CoreDotNet(core);
}
inline CoreDotNet^ GetCore(){return _core;}
//... destructor follows
};
}
Проект CoreWrapper содержит ссылку на проект CoreLib. Я видел некоторые посты вокруг "Internets" о том, что оболочки CLI / C ++ получают вышеупомянутую ошибку компилятора, потому что они ссылаются на проект C ++ И включают файл заголовка, но у меня не было этой проблемы, пока я не добавил второй класс т. е. класс AtomDotNet
) к библиотеке-обертке, и я попытался скомпилировать его. Есть идеи о том, что здесь может происходить?