stl newbie frage



  • Hi!

    wollt mal fragen wo hier das problem liegen kann oder ob ich das thema komplett verfehle

    Hauptprogramm: main.cpp

    #include "test.h"
    
    int main(void) {
    
    Zahl test(1);
    
    test.Ausgabe();
    
    return 0;
    }
    

    Header: test.h

    #include <vector>
    #include <iostream>
    using namespace std;
    
    class Zahl {
    
    private:
    
    public:
    
    typedef vector<int> SuperZahl;
    
    Zahl();
    Zahl(int);
    
    void Ausgabe() {
    
    vector<int> SuperZahl;
    vector<int>::iterator pos;
    for (pos = SuperZahl.begin(); pos < SuperZahl.end(); ++pos) {
    cout << *pos;
    }
    cout << endl;
    }
    };
    
    Zahl::Zahl() {
    }
    
    Zahl::Zahl(int ziffer) {
    vector<int> SuperZahl;
    SuperZahl.push_back(ziffer);
    }
    

    Die 1 aus dem objekt test wird richtig eingetragen an die erste speicherstelle, hab ich mit dem debugger nachgesehen.
    Problem is das nichts ausgegeben wird obwohl ich eigentlich das ziel hatte das bei der ausgabe auf die konsole die 1 ausgelesen und geschrieben wird.

    vielleicht kann ja einer helfen und der code is einfach nur totaler quatsch befasse mich erst seid heute mit dem thema.

    schonmal vielen dank
    quibb



  • quibb schrieb:

    ob ich das thema komplett verfehle

    JA! Lass die finger von der STL wenn du noch nicht mal Klassen beherrscht!



  • ohoh entschuldigung!
    kann nichts dafuer das ich ne klausur schreibe und kein plan von dem zeug hab, muesste nur mal sehen wies richtig auszusehen hat.
    aber entschuldigung das ich ne frage stelle...



  • Hi,

    zuerst würde ich sagen, dass keine Funktion innerhalb einer Klasse definiert werden sollte. Also schreib lieber:

    class Zahl
    {
    ...
    void Ausgabe();
    ...
    };
    
    void Zahl::Ausgabe()
    {
    }
    

    Ich denke, dass nichts ausgegeben wird, weil du keine Daten auslesen lässt sondern einen Iterator. Ich kenne mich mit den Iteratoren der STL nicht so gut aus, muss ich gestehen.
    Aber die vector Klasse bietet einen viel einfacheren zugang:

    vector<int> vec;
    for(int x = 0; x < vec.size(); x++)
    cout << vec[x];
    

    Dann solltest du keinerlei Probleme mit den Inhalten bekommen.



  • wtf schrieb:

    ...kann nichts dafuer das ich ne klausur schreibe und kein plan von dem zeug hab...

    Dassss glaub ich nicht. 😃 😃

    Entweder studierst du das, für dich, verkehrte Fach. Dann solltest du es mal
    mit was anderem probieren. Oder du hast schlicht und einfach die Vorlesung
    verpennt. Was dann aber ebenfalls deine eigne Schuld wäre.
    Wer am Ende eines Semesters ne Klauser mit/über C++ schreibt und so wenig
    Ahnung von der Syntax dieser Programmiersprache hat, dem kann man eigentlich
    nur wünschen das er das Semester nochmal in aller Ruhe absolviert.



  • Dir fehlen ganz einfach die tiefsten Grundkenntinisse der OOP, die wird dir hier im Forum auch keiner nochmal erklären. Du kannst aber in eurem Buch/Skript oder im Internet das ganz nachlesen.

    Desweiteren:
    - Dein Code ist nicht gut eingerückt, das hilft sehr!
    - Dein typedef ist absolut nutzlos, weißt du was typedef macht? (Das soll eine anregung zum Nachschlagen sein)
    - Eine Variable lebt __IMMER__ nur in ihrem Scope (das zwischen den geschweiften Klammern in denen sie deklariert wird). Schau mal wo deine Variablen leben. Du solltest eine Variable für die Klasse haben, nicht eine für jede Methode.

    Gruß



  • Zahl::Zahl(int ziffer) { 
    // vector<int> SuperZahl; // diese zeile muß weg
    SuperZahl.push_back(ziffer); 
    }
    

    du hast SuperZahl im konstruktor nochmal als lokale variable deklariert. der compiler schreibt dann die ziffer in die lokale variable und nicht in die objektvariable.

    for (pos = SuperZahl.begin(); pos < SuperZahl.end(); ++pos)
    

    das pos<SuperZahl.end() funktioniert zwar bei vektoren, aber nicht bei listen, deques etc. es ist schlechter stil. du solltest statt dessen != nehmen:

    for (pos = SuperZahl.begin(); pos != SuperZahl.end(); ++pos)
    

    und das typedef vector<int> SuperZahl solltest du ganz streichen.

    das hat fireflow zwar auch schon geschrieben, aber ich wollte es nochmal allgemeinverständlich rüberbringen 😃


Anmelden zum Antworten