Friend-Klassen in verschiedenen namespaces. Ist das möglich

Ich habe Probleme versuchen, zu verwenden die friend-Funktion in C++. 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);
        };

    };

};

und

#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 ist, aber eine Menge Fehler ausgelöst werden durch den compiler (Visual C++ 2008). Ist es möglich, dieses Problem zu lösen?

edit: Obige code ist ein mock-code zu zeigen mein problem. Deine Lösung funktioniert dieser code aber, wenn ich in der Praxis in meinem richtigen code hat nicht funktioniert. Der code ist neearly das 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_

und

#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 eine Fehlermeldung zurückgegeben, die besagt, "CMesh3D" ist kein member von "Rendern".
Wieder, jede Hilfe ist willkommen. 🙂

edit 2: ich habe es gelöst durch übersendung der Erklärung der einzelnen Klassen und einem eigenen Namensraum in beiden Klassen. Ich dachte, dass dieser Ausfall durch zirkuläre Erklärung, aber es schließlich perfekt funktionieren.

Danke an alle für die Hilfe.

InformationsquelleAutor der Frage Killrazor | 2010-10-01

Schreibe einen Kommentar