Frage von askandanswer23, 49

Was bedeutet diese C++ Fehlermeldung?

Hallo,

ich habe ein Problem und zwar Versuche ich in einer Header-Datei eine Funktion zu machen welche mit dem fstream eine Datei öffnet. Dabei kommt allerdings immer diese Fehlermeldung:

"[Error] aggregate 'std::fstream AktuellesStockwerk' has incomplete type and cannot be defined"

Geht das überhaupt den fstream in einer Header zu benutzen. Leider Hat uns unser Lehrer die Aufgabe aufegeben ohne es richtig dran genommen zu haben.

Und bitte Keine Antworten wie Google es oder Kauf dir ein buch, da ihr erstens Zeit spart wenn ihr nix sinvolles schreiben würdet und ihr den sinvollen Antworten den Platz nimmt.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TeeTier, Community-Experte für programmieren, 5

Da sich dein Problem ja wohl schon gelöst hat, noch ein kleiner Hinweis, der m. M. n. in den anderen Antworten untergegangen ist:

Header Dateien sind zwar i. A. nicht für die Definition, sondern nur für Deklarationen gedacht, ABER für Inline- und Constexpr-Funktionen oder gar deren Klassen gilt das natürlich nicht.

Insbesondere Templates werden gerne mal in Headern definiert, es sei denn, man benutzt externe Vorwärtsdeklarationen um Bloat zu vermeiden. Aber auch hierbei hängt es immer vom Einsatzzweck ab, ob sich so etwas lohnt, und bei einfacher Nutzung im Endeffekt nicht sogar noch mehr Bloat erzeugt.

Wenn dir die Hinweise aus meiner Antwort überhaupt nichts sagen und dich überfordern, mach dir nichts draus! Das musst du vermutlich jetzt noch nicht alles verstehen. Behalte einfach im Hinterkopf, dass sich u. U. auch Implementierungen in Headern befinden, das aber in den meisten Fällen nicht erstrebenswert ist. Ausnahmen bestätigen dies.

Schönen Tag noch! ;)

Antwort
von TheQ86, 24

Headerdateien sind nicht dazu gedacht auch die Implementierung einer Funktion zu beinhalten. Implementierungen gehören in eine .c/.cpp Datei gleichen Namens. Das ist aber nicht die Fehlerursache. Um die genau herauszufinden müssten wir deinen Code sehen

Kommentar von askandanswer23 ,

Ja ich habe es schon gelöst...Ich habe die Header Datei vor dem fstream über #include eingebunden, jetzt funktioniert es.

Aber könntest du mal genauer sagen was Implementierungen sind (Kann sein das ich es kenne, nur grad kann ich nix mit anfangen).

Kommentar von TheQ86 ,

In den Header kommen Deklarationen. Das ist nur eine "Bekanntmachung" der Funktion (auch Kopf der Funktion). In die cpp Datei kommt dann die Implementierung (der Rumpf der Funktion, was sie tatsächlich macht).

Der Sinn dahinter ist, dass wenn jemand deine Funktion nutzen möchte, die zB. in einer Library ist, dass er nur die Header Datei einbinden muss und schon genau weiß, WIE er die Funktion aufrufen muss, ohne genau sehen zu müssen WAS sie genau macht.

Bsp.

beispiel.h

int quadrat(int);


beispiel.cpp

#include "beispiel.h"

int quadrat(int i)
{
    return i*i;
}
Kommentar von askandanswer23 ,

Achso also Hab ich da mehr eine Klasse erstellen wollen?

Antwort
von W00dp3ckr, 9

Du KANNST Code in Header-Dateien tun, aber dazu sind sie eigentlich nicht da. Eigentlich solltest Du da Die Deklarationen reintun, nicht den eigentlichen Code.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten