klassen und STL
-
Kurz gesagt: Wenn du lokale Variablen in anderen Funktionen benötigst, mußt du sie dorthin übergeben (das geht per Parameter oder Rückgabewert, je nach Richtung):
void ausgabe(const list<klasse>& l) { for(list<klasse>::iterator i=l.begin();i!=l.end();++i) cout<<i->print()<<endl; } list<klasse> erzeuge() { list<klasse> vals; klasse k(a,b); vals.push_back(k); ... return vals; } int main() { list<klasse> mylist=erzeuge(); ausgabe(mylist); return 0; }
-
Ja da fiels mir doch glatt wie Schuppen aus den Haaren. Und wenn man mehr als ein Elementr zurückgeben will musste man das irgendwie mit Zeigern machen.
Naja. Aber wie nicht anders zu erwarten ist ein neues Problem entstanden.list<klasse> erzeuge() { list<klasse> vals; klasse k(a,b); vals.push_back(k); ... return vals; }so steht das jetzt in etwa auch in meiner *.cpp Datei drin.
Kopfzerbrechen bereitet mir nun meine *.h Datei, denn dort wollte ich den Prtotoyp deklarieren mitlist<klasse> erzeuge()kriege allerdings die Fehlermeldung
c:\Dokumente und Einstellungen\chew\Eigene Dateien\Visual Studio Projects\inputoutput\liste.h(4) : error C2143: Syntaxfehler: Es fehlt ';' vor '<' c:\Dokumente und Einstellungen\chew\Eigene Dateien\Visual Studio Projects\inputoutput\liste.h(4) : error C2501: 'list': Fehlende Speicherklasse oder TypspezifiziererDrum dacht ich mir müsst ich das ding sicherlich dem std Namespace zuordnen
std::list<klasse> erzeuge()Da sagt mmir der gemeine Hund es sei kein Element von std. Was ich stark zu bezweifeln mag.
Wie schreib ich das jetzt syntaktisch korrekt?
-
du brauchst auch ein "#include <list>" in der Headerdatei, damit der Compiler die Liste erkennt (und btw ein ; am Ende des Prototyps).
-
chewbo schrieb:
Ja da fiels mir doch glatt wie Schuppen aus den Haaren. Und wenn man mehr als ein Elementr zurückgeben will musste man das irgendwie mit Zeigern machen.
naja, schau dir das thema aber genau an, bevor du damit arbeitest!
denn unter zurückgeben, und verändern ist ein unterschied!und versuchs mal mit
list<klasse> erzeuge;statt
list<klasse> erzeuge()
-
Gbit der mir die gleiche Fehlermeldung aus. sowohl mit als auch ohne std::....
-
chewbo schrieb:
Gbit der mir die gleiche Fehlermeldung aus. sowohl mit als auch ohne std::....
hast den hinweis von cstoll beachtet?
-
oops das muss ich wohl überscrollt haben.
Sorry. das ist mir jetzt peinlich.Jetzt klappt es. Vielen dank.
wusste garnicht dass man in headerdateien auch headerdateien included.
Man lernt doch täglich dazu.....Vielen dank nochmal. Jetzt komm ich weiter....
chewbo
-
chewbo schrieb:
wusste garnicht dass man in headerdateien auch headerdateien included.
Ja, macht man - wenn man deren Deklarationen für seine eigenen Funktionsprototypen benötigt (schließlich will dein Compiler wissen, was er da machen soll, wenn er eine list<klasse> zurückgeben muß).
-
Ähm noch ein Problem krieg ich hier grade
cout<<i->print()<<endl;Krieg da die Fehlermeldung
c:\Dokumente und Einstellungen\chew\Eigene Dateien\Visual Studio Projects\inputoutput\liste.cpp(31) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'void' akzeptiert (oder keine geeignete Konvertierung möglich)Kann damit nichzt wirklich wasw anfangen
-
liegt viell daran, das print() void zurückgibt!
das heißt, du solltest es mal ohne dein cout<< probieren!