problem mit 2d vector bzw



  • ich habe vorher noch nie mit klassen gearbeitet und wollte nun einen dyn. 2d vector machen mithilfer einer solchen klasse:

    long double k_rechnung(vector<char> vc) {
    
    class vec {
    public:
      char zahl;
      int pos;
    };
    
    vector<vec> k_temp;
    vec.tmp_var;
    
      for(int i = 0; i < vc.size(); i++) {
        if(vc[i] == '(') {
          klammer(vc, i);
          temp_var.zahl = mdas_rechnung(vc);
          temp_var.pos = pos_klammer_a;
          k_temp.push_back(temp_var);
        }
      }
    
      return temp_var;
    }
    

    aber irgendwie funkioniert das nicht so:

    /home/ceberus/tr_sim_01/src/tr_sim_01.cpp:277: error: template-argument k\_rechnung(std::vector<char, std::allocator<char> >)::vec' uses local type k_rechnung(std::vector<char, std::allocator<char> >)::vec'
    /home/ceberus/tr_sim_01/src/tr_sim_01.cpp:277: error: template argument 2 is invalid
    /home/ceberus/tr_sim_01/src/tr_sim_01.cpp:277: error: ISO C++ forbids declaration of k_temp' with no type /home/ceberus/tr\_sim\_01/src/tr\_sim\_01.cpp:278: error: syntax error before.' token
    /home/ceberus/tr_sim_01/src/tr_sim_01.cpp:283: error: temp_var' undeclared (first use this function) /home/ceberus/tr\_sim\_01/src/tr\_sim\_01.cpp:283: error: (Each undeclared identifier is reported only once for each function it appears in.) /home/ceberus/tr\_sim\_01/src/tr\_sim\_01.cpp:285: error: request for member push_back' in `k_temp', which is of non-aggregate type `int'
    /home/ceberus/tr_sim_01/src/tr_sim_01.cpp:316:129: warning: no newline at end of file
    *** Beendet mit Status: 2 ***

    weiß jemand warum und wie man das behebn könnte, thx 😞



  • du kannst doch eine klasse nicht in einer funktion deklarieren !!!!



  • long double k_rechnung(vector<char> vc) {
    
    class vec {   // Was soll diese Klasse hier? (Siehe dazu Blackhacks-post)
    public:
      char zahl;
      int pos;
    };
    
    vector<vec> k_temp;
    vec.tmp_var; // Was soll das hier? wenn dan sowas: vector<vec> tmp_var;
    
      for(int i = 0; i < vc.size(); i++) {
        if(vc[i] == '(') {
          klammer(vc, i);
          temp_var.zahl = mdas_rechnung(vc);      // Fehler bzg. obiger Deklaration
          temp_var.pos = pos_klammer_a;    // Fehler    "          "      " und wo ist pos_klammer a deklariert? (global?)
          k_temp.push_back(temp_var);  // Fehler, du kannst so keinen ganzen Vektor anhängen.
        }
      }
    
      return temp_var;
    }
    

    [/quote]



  • Doch, man kann Klassen innerhalb Funktionen definieren (obwohl das in meinen Augen nur bei speziellen Template-Anwendungen einen echten Sinn hat). Allerdings sind lokale Klassen auch nur innerhalb der Funktion sichtbar, und daher kann ein std::vector<vec> schon mal nicht erzeugt werden. Das wären die ersten drei Fehlermeldungen. Lösung: class vec vor der Funktion deklarieren und nicht in ihr.

    Nächster Fehler: "vec.tmp_var" ist völliger Unsinn, du meintest wohl eher "vec temp_var", oder? Und schließlich ist der Rückgabewert falsch. Wenn du long double zurückgeben willst, kannst du nicht temp_var zurückliefern, das ja vom Typ vec sein soll. Und was du insgesamt mit diesem Codeausschnitt erreichen willst, erschließt sich mir auch nicht direkt, Anzeichen für einen 2d-Vector kann ich hier nicht wirklich erkennen?



  • danke für die vielen antworten!!

    Nächster Fehler: "vec.tmp_var" ist völliger Unsinn, du meintest wohl eher "vec temp_var", oder?

    uups schreibfehler

    Und schließlich ist der Rückgabewert falsch. Wenn du long double zurückgeben willst, kannst du nicht temp_var zurückliefern, das ja vom Typ vec sein soll.

    peinlic 😮

    Und was du insgesamt mit diesem Codeausschnitt erreichen willst, erschließt sich mir auch nicht direkt, Anzeichen für einen 2d-Vector kann ich hier nicht wirklich erkennen?

    hast du einen besseren vorschlag??? bin für alles offen. zumindest hab ich jetz keine fehler mehr 🙂 (mehr oder weniger 😞 )



  • Naja, wenn du einen zweidimensionalen Vektor brauchst, kannst du z. B. das hier verwenden:

    vector< vector< typ > > 2dvec;

    Ansonsten hätte die boost-Library (www.boost.org) einen multi_array zu bieten, der ist allerdings afaik nicht dynamisch in seiner Größe...



  • und wozu haben die dann einen eigenen arraytyp geamacht 😕
    und ein vector in einem vector???naja ich dahte das wenn ich eine klasse/struct in nen vector packe, hab ich einen guten ersatz,
    ABER wenn du meinst das das keiner ist... 😞

    das war auch der grund weil ich die klasse in die funktion gepackt habe.

    [/code]
    /*
    ich hab mich boost bisher nur auseinander gesetzt als ich in erfahrung bringen wollte wie man am einfachsten eine dateisuche bewerkstelligt.
    */
    [code]


Anmelden zum Antworten