Forward Declaration funktioniert nicht
-
Hallo,
ich hätte nicht gedacht, dass ich bei solch einem Problem stecken bleibe...Ich habe ein Header File namens
Level.h
:#pragma once namespace GameEngine { class LevelParser; class Level { friend class LevelParser; public: // ... private: Level(); }; }
LevelParser.h
inkludiert direktLevel.h
(wegen demstd::unique_ptr
)#pragma once #include "Level.h" #include <memory> namespace GameEngine { class Layer; class LevelParser { public: std::unique_ptr<Level> parseLevel(const char* levelFile); }; }
Das
LevelParser.cpp
sieht so aus:#include "GameEngine/LevelParser.h" namespace GameEngine { std::unique_ptr<Level> LevelParser::parseLevel(const char *levelFile) { auto level = std::make_unique<Level>(); // FEHLER: In template: calling a private constructor of class 'GameEngine::Level' // ... return level; } }
In Zeile 8 bekomme ich nun den Fehler, dass ich den privaten Konstruktor von
Level
aufrufe.Was mache ich falsch?
Danke im Voraus!
Steffo
-
Ja, das ist ein bisschen doof von der Art her, wie das hier funktioniert.
LevelParser
mag zwar ein Freund vonLevel
sein, abermake_unique<Level>
ist es nicht, und das ist es, was hier den Konstruktor aufrufen will. Alternative:auto level = std::unique_ptr<Level>(new Level());
-
Ach du Sch...
Ich erinnere mich: Tatsächlich hatte ich ein einziges Mal dieses Problem und ein Kollege hat mich darauf hingewiesen...
Leider hat C++ zu viele Fallstricke.Danke für die Lösung jedenfalls!