Referenz auf ein Objekt zurückgeben
-
Guten Abend zusammen,
ich stehe gerade etwas auf dem Schlauch. Effektiv versuche ich gerade etwas in C++ umzusetzen das ich dauern in Java verwendet habe.
Ich habe eine Klasse "Book", diese enthält eine Liste mit "Kapitel"
Es werden dann mehrere Kapitel erstellt und der Book zum Hinzufügen zur Liste Übergeben.
Soweit so gut.Jetzt möchte ich jedoch bei einem der bereits erstellten "Kapitel" den namen ändern - Ohne jedoch dass ich mir ein neues Objekt anlege, den Namen ändere und dann das alte Objekt mit replace ersetze.
Irgendwo beim Umdenken zwischen Java/C++ habe ich mich verlaufen, aber ich sehe gerade den Wald nichtmehr.
Denn Code habe ich lesefreundlich gekürzt, alles wichtige sollte aber drin sein.
Kapitel:
class Kapitel { public: Kampitel(); void setName(QString n){this->name = n}; QString getName(void){return name}; private: QString name; };Buch.h
class Book { public: Book(); void addChapter(Bookc); Bookc getChapter(int); private: QList <Bookc> chapters; };Buch.cpp
void Book::addChapter(Bookc chapters){ this->chapters.append(chapters); } Bookc Book::getChapter(int i){ Bookc bookc; if(i>0 && i<=this->chapters.count()) { bookc = this->chapters.at(i-1); } return bookc; }...main...() { Book* book = new Book(); Kapitel kap; kap.setName("Name1"); Kapitel kap2; kap2.setName("Name2"); book.addChapter(kap); book.addChapter(kap2); //Bis hier tut alles book->getChapter(1).setName("geänderterName"); //Geht nicht }Vielen Dank
Petra
-
*seufz*
und im falschen Forum bin ich auchnoch gelandet.Könnte mich ein freundlicher Mod verschieben?
LG
Petra
-
Hallo!
Hast du es schon mal mit nem Qlist<> iterator versucht? Das müsste eigentlich funktionieren. Ich würde in der Book Klasse ne Funktion
changeName(QString string, int chapter) { QList<Bookc>::iterator iter=chapters.begin()+chapter; *iter->setName(string); }basteln. In deiner main kannst du dann das aufrufen
... book->changeName("NeuerName",1); //dies würde Kapitel 2 verändern, da die QList bei 0 beginnt ...Hoffe das hilft
gruz caaso
-
Dieser Thread wurde von Moderator/in phlox81 aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum C++ (auch C++0x) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
so wie du es vorhast, müsstest du eine referenz zurückgeben. aber das würde gerade in deinem beispiel zu fehlern führen (referenz auf lokales->temporäres objekt)
Bookc& Book::getChapter(int i){ return this->chapters.at(i-1); }aber ich kenne in dem Kontext QList nicht und weiss daher nicht ob der die arraygrenzen prüft oder referenzen zurückgibt (std::vector macht es jedenfalls)
-
at von QList gibt es nur als konstante Version. Hier würde nur operator[] gehen (ohne check).
-
VIELEN DANK an alle,
Bookc& Book::getChapter(int i){
return this->chapters[i-1];
}Funktioniert genau so wie ich es wollte!
Viele Grüße & ein schönes WE