まず、2 つのコードがあります。
ManagedGlobalsDeclaration.h
#ifndef MGD_H
#define MGD_H
#include "Editor.h"
#include <vcclr.h>
using namespace System;
using namespace Cube3D;
namespace Cube3D {
class ManagedGlobals
{
public:
gcroot<Editor ^> MainEditor;
};
}
#endif
Editor.h
#ifndef EDITOR_H
#define EDITOR_H
#include "System.h"
#include "AddRenderingPipelineCommand.h"
#include "AddMaterial.h"
#include "P_Material.h"
#include "P_UMesh.h"
#include "Log.h"
#include "ManagedGlobals.h" // <------ Error!
#include <vcclr.h>
namespace Cube3D {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
void LoopRender(void);
void GetRenderingOrder(void);
String^ GetListbox2Item();
TextureObject InstancedTexturing[10];
UMesh InstancedMesh[10];
/// <summary>
/// Summary for Editor
/// </summary>
ref class Editor : public System::Windows::Forms::Form
{
// Bla bla bla....
ManagedGlobals.h
#ifndef MG_H
#define MG_H
#include "ManagedGlobals_Declaration.h"
extern ManagedGlobals MG;
#endif
しかし、私のコンパイラは、ManagedGlobalsDeclaration で Editor を認識していないと教えてくれます。クラスManagedGlobalsはManagedGlobalsDeclaration.hで宣言され、その後(他の場所で)実際に定義されるため、externを使用するためだけにヘッダーを作成します。しかし、なぜ Editor を認識しないのでしょうか?
Error 29 error C2065: 'Editor' : undeclared identifier