std::pair sinnvoll?



  • Wenn du ein struct definierst legst du am besten ein Vekor (oder eine list oder was auch immer) davon an. Dann musst du dich nicht um die Speicherallokation kümmern und der Zugriff ist auch einfach.

    Narf naja dann eben das hier ->

    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    struct mypair
    {
        string name;
        string inhalt;
    };
    
    mypair make_mypair(string const& name, string const& inhalt)
    {
        mypair a;
        a.name = name;
        a.inhalt = inhalt;
        return a;
    }
    
    int main()
    {
        vector<mypair> coll;
        coll.push_back(make_mypair("CPP", "Programmiersprache"));
        coll.push_back(make_mypair("Maus", "Eingabegeraet"));
    
        cout << coll[0].name << ":" << coll[0].inhalt << endl;
        cout << coll[1].name << ":" << coll[1].inhalt << endl;
    
    }
    


  • struct Person {
        Person( string einVorname, string einNachname) : vorname( einVorname),
          nachname( einNachname) {};
        string vorname;
        string nachname;
      } ;
    
      vector<struct Person> v; 
      v.push_back( Person( "Gerhard", "Schröder"));
      v.push_back( Person( "Hans", "Wurst"));
      v[1].nachname = "Eichel";
    

    ggf. empfiehlt sich noch ein typedef auf das struct. Sollte das struct mehr Methoden bekommen, lieber eine Klasse drausmachen. Wir akzeptieren hier bei uns nur Initalisierungs-Konstruktoren in structs, aber keine Methoden oder komplexere Konstruktoren.



  • Super, danke.

    Ich probiere es mal. 🙂



  • niemand schrieb:

    struct Person {
        Person( string einVorname, string einNachname) : vorname( einVorname),
          nachname( einNachname) {};
        string vorname;
        string nachname;
      } ;
    
      vector<struct Person> v; 
      v.push_back( Person( "Gerhard", "Schröder"));
      v.push_back( Person( "Hans", "Wurst"));
      v[1].nachname = "Eichel";
    

    ggf. empfiehlt sich noch ein typedef auf das struct. Sollte das struct mehr Methoden bekommen, lieber eine Klasse drausmachen. Wir akzeptieren hier bei uns nur Initalisierungs-Konstruktoren in structs, aber keine Methoden oder komplexere Konstruktoren.

    Der typedef ist in C, jedoch nicht in C++ notwendig. In C++ funktioniert

    vector<Person> v;
    

    ganz so wie erhofft.
    😉 😉



  • Hmm,

    wenn ich dies eingebe:

    std::vector<name_struct> v;
    

    bekomme ich folgenden Fehler... 😢

    error: template-argument

    Was mache ich denn da falsch?



  • Ist ohne weitere Infos schwer zu erkennen (zumindest ohne den Compiler zu kennen).
    Hast Du ein #include<vector> in Deiner Datei?

    Ansonsten poste mal ein minimales Beispiel bei dem dieser Fehler auftritt.



  • 1. was hat deine überschrift mit deinem prob zu tun?

    müsste heissen,

    "bekomme vector dekleration nicht hin"

    oder so

    🙄

    ist in dieser datei dein

    name_struct

    bekannt?



  • Ich habe es erst mal einfach nur übernommen wie vorgeschlagen,
    wobei ich mich noch nicht wirklich mit der Struct-Definition auseinandergesetzt habe.
    #>vecor> habe ich included.

    struct name_struct
    {
    name_struct( std::string einName, std::string einText)
    : name(einName), text(einText) {};
    std::string name;
    std::string text;
    } ;

    std::vector<name_struct> v_name_text;



  • Sorry, sehe da keinen Fehler. Bekomme das hier per Copy&Paste kompiliert.

    Mal die genaue Fehlermeldung (alles, was der Compiler auswirft) posten und welcher Compiler ist das überhaupt?



  • Mein Code lautet:

    #include <iostream>
    #include <string>
    #include <fstream>	//fuer dataiI/O
    #include <iomanip>	//fuer setw()
    #include <cstdlib>	//für EXIT_FAILURE
    #include <vector>
    
    int main()
    {
    
    	struct namestruct 
     	{ 
     		namestruct( std::string einName, std::string einText) 
     		: name(einName), text(einText) {}; 
     		std::string name; 
     		std::string text; 
     	} ; 
    
     	std::vector<namestruct> v_name_text; 
    
    }
    

    Die Fehlermeldung lautet:

    test_struct.cc: In function int main()': test\_struct.cc:22: error: template-argumentmain()::name_struct' uses local
    type main()::name_struct' test_struct.cc:22: error: template argument 2 is invalid test\_struct.cc:22: error: ISO C++ forbids declaration ofv_name_text' with no
    type
    kerstin@linux:~/c++/programmfiles/felsenstein_pruning/AKTUELL> g++ test_struct.cc -o test_struct
    test_struct.cc: In function int main()': test_struct.cc:22: error: template-argumentmain()::namestruct' uses local
    type main()::namestruct' test_struct.cc:22: error: template argument 2 is invalid test\_struct.cc:22: error: ISO C++ forbids declaration ofv_name_text' with no
    type

    Als Compiler nutze ich

    gcc version 3.3.4 (pre 3.3.5 20040809)



  • Die struct-Definition darf nicht in einer Funktion stehen.

    #include <iostream>
    #include <string>
    #include <fstream>    //fuer dataiI/O
    #include <iomanip>    //fuer setw()
    #include <cstdlib>    //für EXIT_FAILURE
    #include <vector>
    
    struct namestruct
    {
        namestruct( std::string einName, std::string einText)
        : name(einName), text(einText) {};
        std::string name;
        std::string text;
    };
    
    int main()
    {
         std::vector<namestruct> v_name_text;   
    }
    


  • Ah so...

    Ok, ich muß noch viel lernen... 😉

    Vielen Dank,
    dann klappts bestmmt!


Anmelden zum Antworten