我在C ++ / CLI库中定义和使用两个相互依赖的类时遇到麻烦。
基于此问题的答案: Visual C++ (C++/CLI) Forward Declaration with Derivative Classes?
我有这个: A.h
#pragma once
#include "B.h"
#ifdef B_H
namespace TestForwardDeclaration
{
public ref class A
{
public:
A()
{
}
double Result;
void Test(B ^b)
{
this->Result = b->Result;
}
};
}
#endif
B.h
#define B_H
#pragma once
ref class A;
namespace TestForwardDeclaration
{
public ref class B
{
public:
B()
{
}
double Result;
void Test(A ^a)
{
this->Result = a->Result;
}
};
}
#include "A.h"
这可以编译,并且似乎具有我需要的功能,但是我无法在不同的文件(例如主DLL文件)中正确实现。如果我同时包含A.h,B.h或同时包含两者,则会收到错误消息“使用未定义的类型'A'。
我想念什么?
编辑
我还没有看到一个清晰完整的例子,说明在C ++中似乎很流行的问题(使用相互依赖的类),因此这是我的特定用例的解决方案:
A.h
#pragma once
#include "B.h"
#ifdef B_H
namespace TestForwardDeclaration
{
public ref class A
{
public:
A();
double Result;
void Test(B ^b);
};
}
#endif
B.h
#define B_H
#pragma once
namespace TestForwardDeclaration
{
ref class A;
public ref class B
{
public:
B();
double Result;
void Test(A ^a);
};
}
#include "A.h"
TestForwardDeclaration.cpp
// This is the main DLL file.
#include "stdafx.h"
#include "A.h"
#include "B.h"
namespace TestForwardDeclaration
{
A::A()
{
}
void A::Test(B ^b)
{
this->Result = b->Result;
}
B::B()
{
}
void B::Test(A ^a)
{
this->Result = a->Result;
}
}