Friend-Klassen in verschiedenen Namespaces. Ist das möglic

Ich habe Probleme beim Versuch, die Friend-Funktion von C ++ zu verwenden. Ich habe diese Schnittstellen:

#pragma once
#include "Mesh3D.h"
#include <string>
namespace tools{
    namespace sysInput{
        class CGeometryManager3D
        {
        public:
            bool loadFromFile(render::CMesh3D& mesh, std::string filename);
            CGeometryManager3D(void);
            ~CGeometryManager3D(void);
        };

    };

};

un

#pragma once
#include "GeometryManager.h"

class CGeometryManager3D;
namespace render{

    class CMesh3D
    {
    public:
        friend class tools::sysInput::CGeometryManager3D;
        CMesh3D(void);
        ~CMesh3D(void);
    };

};

Ich weiß nicht, was passiert, aber der Compiler gibt viele Fehler aus (Visual C ++ 2008).Ist es möglich, dies zu lösen?

bearbeiten Der obige Code ist ein Mock-Code, der mein Problem aufzeigt. Ihre Lösung funktioniert gut für diesen Code, aber als ich meinen Code in die Praxis umsetzte, funktionierte er nicht. Der wahre Code ist fast der gleiche:

#ifndef _ZELESTE_IO_GEOMETRY_MANAGER_H_
#define _ZELESTE_IO_GEOMETRY_MANAGER_H_

#include "ResourceLocationManager.h"
#include <string>
#include "../../render/C3DMesh.h"


namespace tools{
    namespace sysInput{ 
        class CGeometryManager
        {
        private:
            CGeometryManager(void);
            ~CGeometryManager(void);
            static CGeometryManager* m_instance;
        public:
            static CGeometryManager* getInstance();
            bool load3DGeometryFromFile(render::C3DMesh* mesh, const std::string filename);

        };
    };
};

#endif //_ZELESTE_IO_GEOMETRY_MANAGER_H_

un

#ifndef _C3D_MESH_H_
#define _C3D_MESH_H_

#include "Mesh.h"
#include "../tools/io/GeometryManager.h"
#include <string>

namespace tools{
    namespace sysInput{
        class CGeometryManager;
    }
}

namespace render{
    class C3DMesh
        :public CMesh
    {
    public:
        friend class tools::sysInput::CGeometryManager;
        C3DMesh(void);
        ~C3DMesh(void);
    };

};
#endif // _C3D_MESH_H_

Der Compiler gibt einen Fehler zurück, der besagt, dass "CMesh3D" kein Mitglied von render ist. Auch hier ist jede Hilfe willkommen. :)

edit 2: Ich habe es gelöst, indem ich die Deklaration jeder Klasse und ihren eigenen Namespace in beiden Klassen weitergeleitet habe. Ich dachte, dass dies per Rundschreiben nicht klappen sollte, aber es funktioniert schließlich einwandfrei.

ielen Dank für die Hilf

Antworten auf die Frage(4)

Ihre Antwort auf die Frage