Vorwärtsdeklaration und new Problem
-
Warum lässt sich folgendes nicht kompilieren?
#include <iostream> #include "parent.h" #include "child.h" using namespace std; int main() { }#ifndef _PARENT_ #define _PARENT_ #include "child.h" class Child; class Parent { private: Child* child; public: Parent(){} }; #endif#ifndef _CHILD_ #define _CHILD_ #include "parent.h" class Parent; class Child { private: Parent* parent; public: Child(){ Parent* test = new Parent; } }; #endiferror C2512: 'Parent': Kein geeigneter Standardkonstruktor verfügbarwenn ich stattdessen Child* test = new Child; mache, geht es...
Und nur Parent* test; geht auch...aber ich brauch diesen new
-
Wenn zwei Header sich gegenseitig einbinden, endet das regelmäßig in einer Katastrophe. In deinem Fall steht nach der Verarbeitung durch den Präprozessor die Definition der Child-Klasse vor der Parent-Klasse - und dadurch kennt der Compiler dort nur die Forward-Deklaration.
Beste Lösung: Bring deine include-Anweisungen in Ordnung - und trenne die Klassendefinitionen und die Methoden-Implementation.
-
okay ich hab nach allen Möglichkeiten versucht und habe nur eine Möglichkeit gefunden wenn ich #include "parent.h" in main lösche
Das mit Trennung von Klassendefinition und Methoden-Implemention scheint dem Compiler irrelevant zu sein?
-
aber wenn ich das hier in parent.h datei hinzufüge:
Parent(){Child* test = new Child;}hab ich wieder ein Problem...
das ist so ein wirrwarr...
-
Wie gesagt, trenne die Definition und Implementierung - und damit meinte ich nicht nur, die Implementierung unter die Klasse zu schreiben.
PS: Wenn Parent und Child sich gegenseitig per new erzeugen, bekommst du etwas größere Probleme

-
okay tatsächlich, erst mit cpp und h scheint es zu gehen
ich hoffe mal dass ich die größeren Probleme nicht bekomme. Zumindest werden die aus meiner komplexeren code nicht so direkt gegenseitig mit new erzeugt.
Hab mein Problem hier stark reduziert demonstriert.danke dir