0

まず、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
4

1 に答える 1

2

循環インクルードがあります。代わりに前方宣言を使用してみてください。

#ifndef MGD_H
#define MGD_H

#include <vcclr.h>

using namespace System;
using namespace Cube3D;

namespace Cube3D {
    ref class Editor;

    class ManagedGlobals
    {
        public: 
            gcroot<Editor ^> MainEditor;
    };
}

#endif
于 2012-07-19T21:08:22.243 に答える