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.hinkludiert 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.cppsieht 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
Levelaufrufe.Was mache ich falsch?
Danke im Voraus!
Steffo
-
Ja, das ist ein bisschen doof von der Art her, wie das hier funktioniert.
LevelParsermag zwar ein Freund vonLevelsein, 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!