[Gelöst] Objekte in std::vector speichern, wie geht das?



  • Wegen

    lines<actuallline>.toelements();
    

    in meinem Code gab es abermillionen von Fehlermeldungen.
    Wenn ich lines nicht als vector verwende also

    lines.toelements();
    

    dann funktioniert es, also auch in der Deklaration nicht als vector deklariere.
    lines ist ein Objekt von der selbst kreierten Klasse File.
    actuallline ist ein interger der im Hauptcode gesetzt ist.
    toelements ist eine Methode der Klasse Line also vom Objekt lines.
    Ich vermute mal der Fehler kommt daher das std::vector, was ich verwendet habe nicht für Objekte ausgelegt ist.
    Wie kann ich eine Beliebige Anzahl Objekte in einem Feld speichern?
    Oder liegt es daran das ich für Objekte in einem Vector keine Methoden aufrufen kann, wie kann ich es in dem Fall anders lösen?
    Zugegeben ich hab davor noch nie was mit vectoren gemacht, wenn meine Fragen dumm scheinen Sorry.



  • Deine Frage an sich ist nicht dumm, dumm ist, dass du keine Code und keine Fehlermeldungen zeigst!

    class line { ... };
    std::vector<line> lines ;
    lines.push_back(line());
    ...
    lines[0].toElements()
    


  • Evolykane schrieb:

    Wegen

    lines<actuallline>.toelements();
    

    in meinem Code gab es abermillionen von Fehlermeldungen.

    Zu recht. Soll das vielleicht lines[actualline].toelements(); heißen? BTW aktuell heißt auf Englisch nicht actual, sondern current.



  • Bashar schrieb:

    Soll das vielleicht lines[actualline].toelements(); heißen?

    Hab ich gerade probiert, funktioniert nicht.
    Hier die Klassen die mit dem Vectorproblem zu tun haben.

    //file.hpp
    #ifndef FILE_HPP_
    #define FILE_HPP_
    #include <string>
    #include <vector>
    #include "line.hpp"
    class File
    { 
    	private:
    		std::vector<Line> lines;
    		int actuallline;
    	public:
    		File();
    		void takechar(char _zeichen);
    };
    #endif
    
    //file.cpp
    #include "file.hpp"
    #include "line.hpp"
    File::File()
    {
    	actuallline = 0;
    }
    void File::takechar(char _zeichen)
    {
    	if(_zeichen == '\n')
    	{
    		lines<actuallline>.toelements();
    		actuallline++;
    	}
    	else
    	{
    		lines<actuallline>.takechar(_zeichen);
    	}
    }
    
    //line.hpp
    #ifndef LINE_HPP_
    #define LINE_HPP_
    #include <string>
    #include <vector>
    class Line
    { 
    	private:
    		std::vector<std::string> elements;
    		std::string oldline;
    	public:
    		void takechar(char _zeichen);
    		void toelements();
    };
    #endif
    
    //line.cpp
    #include "line.hpp"
    void Line::takechar(char _zeichen)
    {
    	oldline += _zeichen;
    }
    void Line::toelements()
    {
    
    }
    


  • Evolykane schrieb:

    Bashar schrieb:

    Soll das vielleicht lines[actualline].toelements(); heißen?

    Hab ich gerade probiert, funktioniert nicht.

    Fehlerbeschreibung?

    Hier die Klassen die mit dem Vectorproblem zu tun haben.

    Nichts offensichtliches zu sehen. (Außer natürlich der Blödsinn mit den <...>-Klammern.)



  • Errorlog: http://pastebin.com/ag51B5Tw
    Zu den [] soweit ich weiß sind die eckigen Klammern für Arrays zu benutzen und <> für std::vector weil das ein template ist oder so.



  • Evolykane schrieb:

    soweit ich weiß sind die eckigen Klammern für Arrays zu benutzen und <> für std::vector

    Das ist Unsinn.



  • Evolykane schrieb:

    Zu den [] soweit ich weiß sind die eckigen Klammern für Arrays zu benutzen und <> für std::vector weil das ein template ist oder so.

    Na, wenn du alles schon weißt, warum fragst du dann hier? Hier laufen nur die Idioten rum, die [] benutzen würden.



  • Evolykane schrieb:

    Errorlog: http://pastebin.com/ag51B5Tw

    Ich meinte den Fehler, NACHDEM du die <...> durch [...] ersetzt hast.



  • http://pastebin.com/wfs6jn29
    Ich mach es dann doch lieber mit Arrays, wie bekommt man die Anzahl der Zeilen einer Datei?



  • Evolykane schrieb:

    http://pastebin.com/wfs6jn29

    Verarschen kann ich mich alleine.

    File/file.cpp: In member function ‘void File::takechar(char)’:
    File/file.cpp:16:8: error: no match for ‘operator<’ (operand types are ‘std::vector<Line>’ and ‘int’)
       lines<actuallline>.takechar(_zeichen);
            ^
    


  • *facepalm* stimmt ja es waren 2 Methodenaufrufe.
    Vielen Dank das du mich darauf aufmerksam gemacht hast, jetzt gibt es keinen Fehler mehr in den beiden Klassen.


Anmelden zum Antworten