Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit zwei Klassen und Zeigern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
14.08.2006, 16:16 Uhr
FunnyDingo



Habe gerade den Tipp bekommen, o.g. Code etwas zu beschreiben, daher hier noch mal mit etwas mehr Kommentaren und aussagekräftigeren Funktionsnamen:

C++:
bool benutzerDB::BenutzerHinzufuegen() {
  // Suchen des benötigten Raums, rückgabe ist ein Zeiger...
  //...

  // Neues Benutzer-Objekt holen
  benutzer neuerBenutzer;
  // aktuellerRaum ist ein Zeiger auf ein raum-Objekt. Dies wird an setzteRaum übergeben und dort im Objekt hinterlegt.
  neuerBenutzer.setzteRaum(aktuellerRaum);
  // Für einen schnellen Zugriff hat jeder Raum eine eigene Benutzerliste. Ein Vector aus Zeigern aus Benutzer-Objekten. Hier wird ein Zeiger auf das Benutzer-Objekt an die Funktion BenutzerHinzufuegen übergeben um den Zeiger in dem vector abzulegen-
  aktuellerRaum->BenutzerHinzufuegen(&neuerBenutzer);
  // Nun das Benutzerobjekt in die "globale" Benutzerliste legen.
  benutzerliste.push_back(neuerBenutzer);
  return true;
}


Ich frage mich nun: Funktioniert mein Programm bisher nur durch Zufall? Zeigt der Zeiger, der in der Benutzerliste des Raums liegt, noch auf den richtigen Bereich? Liegen in dem Vector Referenzen oder Kopien der Objekte? Fragen über Fragen...
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 14.08.2006 um 16:17 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
14.08.2006, 17:07 Uhr
(un)wissender
Niveauwart


Ein std::vector mit Referenzen kann es nicht geben, da diese genau einmal (bei der Defintion) initialisiert werden müssen. Außerdem ist das nehmen von Referenzen von Referenzen nicht erlaubt. Aus diesen Gründen funktionieren viele der Elementfunktionen nicht.
Ein std::vector mit Pointern ist kein Problem. Man muss nur ran denken diese manuell zu löschen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
14.08.2006, 17:32 Uhr
FunnyDingo



Zu meinem obigen Code:

Durch einen kurzen Test habe ich festgestellt, dass dieser nicht funktioniert. Nun habe ich den mal überarbeitet und die Ausgaben auf der Konsole (cout im Kon- und Destruktor) erwecken in mir den Eindruck, als wäre es nun richtig (diesmal direkt aus dem Projekt kopiert):

C++:
bool userdatabase::add(unsigned int s, string n, string c, string r) {
    
    
    ///////////////////////////////////
    //    Create user object
    ///////////////////////////////////
    
    chatuser *user = new chatuser(s, n);
    user->color = c;
    
    
    ///////////////////////////////////
    //    Find room to join
    ///////////////////////////////////
    
    chatroom *loginroom = roomdb.find(r);
    if (loginroom == NULL) {
        //loginroom = roomdb.find_first_mainroom();
        //if (loginroom == NULL)
            return false;
    }
    
    
    ///////////////////////////////////
    //    Add user to room
    ///////////////////////////////////
    
    loginroom->add_user(user);
    
    
    ///////////////////////////////////
    //    Keep pointer to room in user object
    ///////////////////////////////////
    
    user->room = loginroom;
    
    
    ///////////////////////////////////
    //    Add user to userlist & return
    ///////////////////////////////////
    
    userlist.push_back(user);
    return true;
} // EndFunc userdatabase::add()



Nun werden die User- und Room-Objekte mittels new() erzeugt und in den Vektoren (vielleicht stelle ich noch auf Listen um) befinden sich nur noch Pointer - ich denke so sollte es richtig sein, oder?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: