während der laufzeit variable zu einer liste hinzufügen



  • ein beispiel:

    in einer schleife lasse ich den benutzer dauernd einen satz(string) eingeben - so oft er will. jetzt gibt es 2 problemlösungsmöglichkeiten

    1. ich erstelle ein array mit 100000 stellen(sehr schlecht)
    2. ich erstelle einen array mit 2 stellen und lasse ihn dynamisch erweitern -> wie mache ich das?

    mfg



  • Am besten mit einem vector<string>

    Code (nicht getestet):

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
    	vector<string> Liste;
    
    	string aktuell;
    	for(int i = 0;i<5;++i)
    	{
    		cout << "String eingeben: ";
    		getline(cin, aktuell);
    		Liste.push_back(aktuell);
    	}
    	//Zugriff auf die Elemente dann wie bei einem Array: Liste[0...n-1]
    	for(int i = 0;i<5;++i)
    		cout << Liste[i] << endl;
    }
    


  • perfekt.

    nur so nebenbei: gibt es irgendwo deutsche STL tutorials? hab mir paar englische gesaugt aber bin mir nicht so ganz sicher -> deswegen wollte ich das ganze nochma auf deutsch ^^



  • neues problem:

    class a
    {
    private:
    vector<string> a;
    public:
    void setString(string value)
    {
        a.push_back(value);
    };
    };
    

    dabei bekomme ich die fehlermeldung auf ein unaufgelöstes externes symbol -> was mache ich falsch?



  • wenn du mit dem gcc kompilierst, dann benutz den befehl g++ statt gcc. Bei anderen Compilern wohl irgendwo in den Einstellungen von C auf C++ umstellen.



  • nein daran lag es nicht. is schon auf c++ eingestellt. ich benutze btw visual studio 2k5



  • kann es sein, dass class a

    und vector a sich gegenseitig nicht vertragen?



  • wieso sollten sie



  • Hallo,

    TravisG schrieb:

    dabei bekomme ich die fehlermeldung auf ein unaufgelöstes externes symbol -> was mache ich falsch?

    sag uns wo (Zeile) die Fehlermeldung auftritt und wie sie genau lautet.

    k.m.w schrieb:

    kann es sein, dass class a

    und vector a sich gegenseitig nicht vertragen?

    TravisG schrieb:

    wieso sollten sie

    Weil sie gleich heißen?!?

    However, geht das?:

    #include <vector>
    #include <string>
    
    class Foo {
      std::vector<std::string> vec;
    public:
      void setString(const std::string &s) {
        vec.push_back(s);
      }
    };
    

    MfG

    GPC



  • der compiler zeigt _keine_ zeile an und der fehler tritt beim linken auf

    dass sie gleich heißen war nur ein versehen, das echte problem ensteht mit nem programm wo sie unterschiedlich heissen. nehmt einfach ma an das der vector a jetzt b heisst ^^

    edit: ja es geht

    2.edit es scheint was damit zu tun zu haben das die implementierung in ner anderen datei steht als die deklaration der klasse. ich ma bissel rumprobieren



  • 2.edit es scheint was damit zu tun zu haben das die implementierung in ner anderen datei steht als die definition der klasse. ich ma bissel rumprobieren

    Definition und Implementation sind das selbe.

    Hier ein Beispiel wie es aussehen kann:

    //foo.hpp
    #include <vector>
    #include <string>
    
    //Deklaration von Klasse Foo mitsamt member
    class Foo {
      std::vector<std::string> vec;
    public:
      void setString(const std::string &s);
    };
    
    //foo.cpp
    #include "foo.hpp"
    
    //Definition(Implementation) der Methode Foo::setString
    void Foo::setString(const std::string &s) {
      vec.push_back(s);
    };
    

    MfG

    GPC



  • exakt so sieht es bei mir aus nur aber der fehler kommt trotzdem.

    das ist echt zum verzweifeln



  • Kompilierst du die foo.cpp auch mit? Welchen Compiler benutzt du? Hoffentlich einen C++ Compiler, oder?



  • ja, der beweis ist dass in der dazugehörigen *.cpp auch andere implementierungen stehen die allesamt funktionieren

    edit: übers forum is anstrengend ^^ bist du im irc?


Anmelden zum Antworten