Klasse mittels header pototyp deklarieren...
-
Um mal mein Problem verständlich zu machen: Wenn man Funktionen in die eine und das main in eine ander Datei schreibt, muss man ja eine header includieren, die den Kopf aller Funktionen aus der Funktionen datei hat. (Irgend jemand hat mir mal gesagt das heißt prototypen deklaration?)
Nun würde ich das gerne mit einer Klasse genauso machen... Geht das? Ich hab schon probiert in die headerclass xyz;
zu schreiben klappt aber net!
-
mach doch richtig eine klasse ....
class foo { private: // irgendwas protected: // irgendwas public: // irgendwas };
-
Ich hab eine richtige Klasse! Die steht aber in einer anderen Datei! Und wenn ich dann schreibe (in main)
xyz a(/*was auch immer*/)
Krieg ich die Fehlermeldung, das xyz nicht definiert ist!
-
du musst die datei in der du deine klasse definierst includen
#include "deineklasse.h"
-
Ja, sowas nennt sich ein "Prototyp", die Funktion/Klasse wird dabei "deklariert" (d.h. dem Programm wird gesagt: ich hab eine Funktion/Klasse, und die sieht fuer alle, die sie benutzen wollen, so und so aus)...
Der Compiler weiss dann "gut, die Funktion gibts, die darf verwendet werden"... aber irgendwo musst du auch noch sagen, WAS die Funktion denn tut, d.h. die ganze Funktion mitgeben, die Funktion auch noch "definieren". (Also nicht nur den Funktionskopf schreiben, sondern alles).
Deklarationen gehoeren in Headerdateien, Definitionen in .cpp - Dateien....
Bei einer Klassendeklaration reicht ein
class Foo;
nicht aus (sowas gibts zwar und nennt sich "forward declaration", wird aber zu anderen zwecken verwendet). Eine Klassendeklaration muss dem Compiler sagen "da gibts diese Klasse namens foo, und die hat diese und jene Funktionen und diese und jene Variablen"....
Also sieht eine vollstaendige Klassendeklaration muss also so aussehen:
class Foo { public: Foo(); // meine Klasse Foo hat einen Konstruktor ~Foo(); // und einen D.tor int bar(); // und die Funktion bar(), die einen int zurueckgibt private: int myVar; // und eine Variable hat meine Klasse Foo auch noch };
So sieht der Code aus, der in die Headerdatei soll. in die .cpp Datei kommt dann die Definition von bar(), Foo() und ~Foo().
-
Muss ich die funktionen für überladene Operatoren auch deklarieren?
-
Alle Funktionen müssen definiert werden, außer du arbeitest mit Templatefunktionen, die zur Compilezeit ausgewertet werden.
-
OK, jetzt klappt alles!
-
OK, jetzt klappt alles!
/edit: Wie kann man hier Beiträge löschen?
-
ness schrieb:
Wie kann man hier Beiträge löschen?
Gar nicht, du kannst nur editieren.