problem mit include
-
ok stand drinnen.
wie soll ich aber in schueler jetzt eine zeitleiste benutzen können?
-
wsxedcrfv schrieb:
ok stand drinnen.
wie soll ich aber in schueler jetzt eine zeitleiste benutzen können?Wenn du Schueler und Klasse in Zeitleiste.h nur für die Pointer in den Vectoren benötigst, reicht statt den beiden includes einfach
class Klasse; class Schueler;vor den vector-Definitionen. Dann kannst du Zeitleiste.h ohne Probleme benutzen.
Lars
-
die pointer sollen aber immer auf eine bestimmte menge von objekten zeigen.
so sind das doch dann pointer auf unterschiedliche objekttype. einmal auf schueler1 und einmal auf schueler2.
ich hatte die idee das ganze mit voidpointern zu umgehen aber sobald ich dass eine variable des objekts benutzen will muss ich den pointer zurückcasten und bräuchte wieder einen include.
daher geht das auchnicht.
-
wsxedcrfv schrieb:
die pointer sollen aber immer auf eine bestimmte menge von objekten zeigen.
so sind das doch dann pointer auf unterschiedliche objekttype. einmal auf schueler1 und einmal auf schueler2.
ich hatte die idee das ganze mit voidpointern zu umgehen aber sobald ich dass eine variable des objekts benutzen will muss ich den pointer zurückcasten und bräuchte wieder einen include.
daher geht das auchnicht.Das ist kein Problem. Zeiger sind immer gleich groß, daher reicht eine Vorwärtsdeklaration aus. Es muss nur bekannt sein, dass überhaupt der Objekttyp existiert auf den gezeigt werden soll.
Das Include brauchst du erst, wenn mit den Zeigern tatsächlich gearbeitet werden soll, aber das ist dann ja üblicherweise in der Source-Datei und nicht im Header.
-
wsxedcrfv schrieb:
die pointer sollen aber immer auf eine bestimmte menge von objekten zeigen.
so sind das doch dann pointer auf unterschiedliche objekttype. einmal auf schueler1 und einmal auf schueler2.
ich hatte die idee das ganze mit voidpointern zu umgehen aber sobald ich dass eine variable des objekts benutzen will muss ich den pointer zurückcasten und bräuchte wieder einen include.
daher geht das auchnicht.Ich verstehe nicht, was du meinst. Wenn du
class Kurs; class Schueler; vector<Kurs*> kurse; vector<pair<string/*fach*/,Schueler*> > zuvs;schreibst, ändert sich logisch gesehen nichts gegenüber deinem Code.
Lars
-
also in der cpp-datei kann ich ohne probleme den header einbinden?
-
wsxedcrfv schrieb:
also in der cpp-datei kann ich ohne probleme den header einbinden?
Klar, warum nicht?
-
ok dann danke an alle.
warub gibt es eigendlich den fehler wenn ich den header in schueler.h einbinde?
ich habe in jedem header#ifndef SCHUELER_H_ #define SCHUELER_H_ #endifsowas stehen damit ein header nur einmal eingebunden wird...
-
wie kann ich eigebdlich sichergehen, dass ich in der quelldatei die klasse Kurs aus Kurs.h und nicht die klasse Kurs aus Schueler.h benutze?
-
Namespaces.
EDIT: Aber warum gibt es das zweimal?!
-
wsxedcrfv schrieb:
wie kann ich eigebdlich sichergehen, dass ich in der quelldatei die klasse Kurs aus Kurs.h und nicht die klasse Kurs aus Schueler.h benutze?
Irgendwie machst du da merkwürdige Dinge. Wieso gibt es mehrere Klassen mit Namen Kurs? Oder verwechselst du jetzt Klasse und Objekt?
Lars
-
ich habe das problem, dass ich in
Schueler.h
#include "Kurs.h"
stehen hatte und in
Kurs.h
#include "Schueler.h".
das hat fehler verursacht und mir wurde geraten ich soll in Schueler.h eine neue klasse Kurs erzeugen und in der quelldatei Schueler.cpp einbinden.das Problem mit namespaces wäre doch, wenn ich in Schueler.h in einem namespace die klasse Kurs aus Schueler.h benutze, eine Funktion (mit einem parameter vom typ Kurs) erzeuge und dann in der quelldatei die andere klasse benutzen will (Kurs aus Kurs.h). würde ich dann nicht wieder fürd den parameter der funktion Kurs aus Schueler.h benutzen müssen?
-
@manni66
ich habe zwei klassen mit identischen namen.
wie du mir geraten hast.
oder hatte ich dich da falsch verstanden?
-
wsxedcrfv schrieb:
@manni66
ich habe zwei klassen mit identischen namen.
wie du mir geraten hast.
oder hatte ich dich da falsch verstanden?class Kurs;Deklariert keine Klasse Kurs (zumindest nicht richtig). Das gibt nur bekannt, dass es irgendwo eine Deklaration der Klasse Kurs gibt. Damit kann man zwar nicht viel anfangen, aber es reicht um Zeiger auf Kurs zu haben (da ja bekannt ist, dass es eine Klasse Kurs gibt, auch wenn nicht bekannt ist wie sie aussieht). Das ganze nennt man eine Vorwärtsdeklaration.
-
Du hast es absolut falsch verstanden.
Kurs.h:
#include <vector> class Schueler; class Kurs { std::vector<Schueler*> teilnehmer; };Schueler.h:
#include <vector> class Kurs; class Schueler { std::vector<Kurs*> kurse; };#include "Schueler.h" #include "Kurs.h" Schueler::Schuler() { kurse.push_back(new Kurs("wasauchimmer")); }... hab mal ein paar Definitionen etc weggelassen, bin faul.
-
SeppJ schrieb:
class Kurs;Deklariert keine Klasse Kurs (zumindest nicht richtig). Das gibt nur bekannt, dass es irgendwo eine Deklaration der Klasse Kurs gibt. Damit kann man zwar nicht viel anfangen, aber es reicht um Zeiger auf Kurs zu haben (da ja bekannt ist, dass es eine Klasse Kurs gibt, auch wenn nicht bekannt ist wie sie aussieht). Das ganze nennt man eine Vorwärtsdeklaration.
ah ok das wusste ich nicht.....
dnke an alle@Fellhuhn
hab ich jetzt auch bemerkt^^
-
Wie immer zu dem Thema poste ich gerne den Link:
Definitionen und Deklarationen in C++