Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Klassen und Contaier

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 <
000
10.02.2004, 16:46 Uhr
~BlackNator
Gast


Hallo erstmal,
ich habe folgendes Problem. Ich erzeuge eine Klasse mit mehreren Elementen, bilde nach der Klasse ein Objekt mit dem Container deque. Nun will ich mit push_back() in meine Klasse schreiben, weiß aber nicht genau wie.
Zur besseren verständlichkeit schreibe ich mal einen beispiel Code.

C++:
#include <deque>
#include <string>

using namespace std;

class Database
{
  private:
    int _number;
    string _name;
  public:
    bool setNumber( int number );
    bool setName( string name );
};

bool Database::setNumber( int number )
{
  _number = number;
  return true;
}

bool Database::setName( string name )
{
   _name = name;
   return true;
}

int main()
{
   deque<Database> db;                     // ob Contaier deque, vector oder list ist egal
   db.push_back(db.setNumber(1));       // Hier liegt das Problem :cry:
   return true;
}




Bearbeitung von Pablo:

Bitte, cpp tags selber benutzen


Dieser Post wurde am 10.02.2004 um 21:19 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.02.2004, 20:25 Uhr
(un)wissender
Niveauwart


Ja logen ist da ein Problem, setNumer liefert ein bool zurück und du willst aber Database.
Mit push_back kannst nur das Element einfügen, das auch in der Templatedeklartion angegeben ist.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.02.2004, 21:21 Uhr
Pablo
Supertux
(Operator)


Deine main Funktion liefert so einen falschen Wert zurück. Einen Wert ungleich 0 zurückzuliefern, heißt im Prinzip, das Programm endet mit einem Fehler. Wenn du sagen willst, das Programm hat keine Fehler gehabt und endet ohne Fehler, dann return 0;

In stdlib.h gibt es EXIT_SUCCESS und EXIT_FAILURE, du kannst auch sie benutzen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.02.2004, 21:54 Uhr
~BlackNator
Gast


hm, mein problem ist nicht der exit status.
Das Problem liegt darin daß ich von einer Klasse ein Container bilde


C++:
  deque<Database> db;



die Klasse Database hat diese beiden Methoden:


C++:
  bool setNumber( int number );
  bool setName( string name );




Und jetzt will ich die Methoden benutzen um in die Klasse zu schreiben, normalerweise ja so wenn ich keinen Container von der Klasse gebildet habe:


C++:
db.setNumber(1);




aber wie lautet die Zeile wenn ich die Klasse als Container habe, wie oben schon geschrieben. ?

Dieser Post wurde am 10.02.2004 um 21:55 Uhr von Blacknator editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.02.2004, 22:05 Uhr
Pablo
Supertux
(Operator)


Ich weiß, dass das nicht dein Problem war, aber da ich nur C programmiere, kann ich dir in C++ Sache wenig helfen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.02.2004, 23:25 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
Blacknator postete
Hallo erstmal,
ich habe folgendes Problem. Ich erzeuge eine Klasse mit mehreren Elementen, bilde nach der Klasse ein Objekt mit dem Container deque. Nun will ich mit push_back() in meine Klasse schreiben, weiß aber nicht genau wie.
Zur besseren verständlichkeit schreibe ich mal einen beispiel Code.

C++:
#include <deque>
#include <string>

using namespace std;

class Database
{
  private:
    int _number;
    string _name;
  public:
    bool setNumber( int number );
    bool setName( string name );
};

bool Database::setNumber( int number )
{
  _number = number;
  return true;
}

bool Database::setName( string name )
{
   _name = name;
   return true;
}

int main()
{
   deque<Database> db;                     // ob Contaier deque, vector oder list ist egal
   db.push_back(db.setNumber(1));       // Hier liegt das Problem :cry:
   return true;
}




Bearbeitung von Pablo:

Bitte, cpp tags selber benutzen



Ich verstehe den Code hinsichtlich des Sinns nicht. Deshalb übersetze ich ihn mal in Umgangsprache:
Database ist eine Klasse mit den Attributen name und Number, die man auch über entsprechende Methoden setzen kann. Diese Methoden geben ein bool zurück. Soweit klar.

db ein eine Queue von Database Objekten. Auch klar.
mir db.push_back kann man nun normalerweise ein solches Database Objekt am Ende der Queu hinzufügen.
Du rufst aber mit db.setNumber(1) zunächst mal eine Methode für db auf, welches ja eine deque ist. Im ANSI Standard gibt es einen solche Methode nicht. Ich kann mir nur vorstellen, daß Du eigentlich von einem Database Objekt diese Methode aufrufen möchtest, aber das ist weit und breit nicht in Sicht. Und wenn dem so wäre, dann hättest Du deshalb probleme, weil setNumber ein bool und kein Database Object zurückgibt.

Du kannst in db nur Database Objekte reintun, also zB:

C++:
Database a_database;
db.push_back(a_database);


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.02.2004, 23:25 Uhr
virtual
Sexiest Bit alive
(Operator)


Übrigens: Ist reinrassiges C++ bis hierhin ->
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.02.2004, 23:59 Uhr
~BlackNator
Gast


Hi virtual,
ja genau, ich wollte die Methode von einem Database Objekt aufrufen.
Übrigens, der Code der hier steht ist nur ein kleiner Ausschnitt aus meinem aktuellen Programm daß ich zur Zeit schreiben will.

Ich wollte eine Config Datei auslesen und die Werte die in einer Zeile stehen, sollen dann, nachdem ich die Zeile ausgewertet habe, in Klassen gespeichert werden.

Config Datei:

Database 1=Name1 Name2 Name3
Database 2=Name4 Name5 Name6

ich dachte ich könnte das am besten mit einer Klasse und einem Container lösen, oder gibt es da bessere Vorschläge ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.02.2004, 08:41 Uhr
virtual
Sexiest Bit alive
(Operator)


So wie Du die Config datei andeutest, ist jeder DatabaseEintrag einfach ein array von strings, wobei jeder DatabaseEintag draüberhinaus einen Namen hat, mit dem er sich in der Config identifizieren kann.
Eine Database wäre dann:

C++:
class Database
{
private:
    std::vector<string> eintraege;
public:
    ...
};


und die Config eine Map, die namen auf Databases mappt:

C++:
class Config
{
private:
   std::map<std::string, Database> databases;
public:
    ...
};


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.02.2004, 15:13 Uhr
~BlackNator
Gast


Hört sich gut an, dann sollte ich mal die Doku über Map Container durchlesen, habe bisher nur die Doku zu vector, deque und list gelesen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: