Doppelter Vektor mit GCC
-
Ich konnt den Fehler weiter eingrenzen:
//Aus Headerdatei: typedef std::vector<int> __mexprhndlr_intvec; std::vector<__mexprhndlr_intvec*> dblvec; FindEqualSubex(mex, &dblvec); . . . int z = dblvec.at(i)->at(0); //Hier tritt der Fehler auf
-
hackbert schrieb:
Ich konnt den Fehler weiter eingrenzen:
//Aus Headerdatei: typedef std::vector<int> __mexprhndlr_intvec; std::vector<__mexprhndlr_intvec*> dblvec; FindEqualSubex(mex, &dblvec); . . . int z = dblvec.at(i)->at(0); //Hier tritt der Fehler auf
Ist das immer noch ein Kompilierfehler oder ein Laufzeitfehler?
Wenn es ein Kompilierfehler ist, kannst du bestimmt den Code so weit kürzen, dass man es ganz sehen kann.
-
Ups, stimmt sogar, at gibts...nächstes mal kuck ich gleich im Standard und nicht auf der SGI-Seite nach...
Was den Code angeht, das hier:
#include <vector> typedef std::vector<int> __mexprhndlr_intvec; int main() { std::vector<__mexprhndlr_intvec*> dblvec; std::vector<__mexprhndlr_intvec*>::size_type i; int z = dblvec.at(i)->at(0); }
kompiliert bei mir.
-
Ok, ich habe mal ein Beispiel rausgesucht, dass man vom anderen Code trennen kann. Es handelt sich ausschließlich um Kompilierfehler, nicht um Laufzeitfehler.
bool InDblVec(std::vector<__mexprhndlr_intvec*>* vec, int val) { for(int i = 0; i < vec->size(); i++) { for(int k = 0; k < vec->at(i)->size(); k++) //HIER: Kompilierfehler { if(vec->at(i)->at(k) == val) { return true; } } } return false; }
Der entsprechende Fehler dazu, den mit g++ an den Kopf wirft:
no matching function for call to `vector<vector<int,allocator<int> > *,allocator<vector<int,allocator<int> > *> >::at (int &)'
Ich habe irgendwie das Gefühl, dass er std::vector<__mexprhndlr_intvec*>* nicht als std::vector<std::vector<int>> ansieht.
-
nimm statt int lieber std::container<>::size_type;
-
ich schätze du brauchst 'n stl update
-
net schrieb:
ich schätze du brauchst 'n stl update
Wie genau meinst Du das? Wo bekomme ich das her? Ich habe versucht es auf einer Box mit debian 3.0 r 2 Kernel 2.6.1 zu kompilieren. Ich führe regelmäßig updates durch (via apt-get).
GCC benutze ich in der Version 2.95.4.
-
devil81 schrieb:
nimm statt int lieber std::container<>::size_type;
Oder einfach size_t.
-
hackbert schrieb:
net schrieb:
ich schätze du brauchst 'n stl update
Wie genau meinst Du das?...
GCC benutze ich in der Version 2.95.4.ich hab's mit gcc 3.3.1 probiert (mingw) und da geht's d.h. der kennt vector::at(). wie man 'nen linux-gcc updated (vielleicht reichen ja nur neuere stl-files?) weiss ich nicht. vielleicht mal im linux-forum fragen?
-
hackbert schrieb:
net schrieb:
ich schätze du brauchst 'n stl update
Wie genau meinst Du das? Wo bekomme ich das her? Ich habe versucht es auf einer Box mit debian 3.0 r 2 Kernel 2.6.1 zu kompilieren. Ich führe regelmäßig updates durch (via apt-get).
GCC benutze ich in der Version 2.95.4.Das erklärt einiges. Der GCC 2.95.4 ist ein prähistorischer Compiler, der eine C++ ähnliche Sprache übersetzen kann. Man kann ihn auf die gleiche Stufe mit MS VC 6 stellen. Beide sind vor dem C++ Standard entstanden und sind für C++ eigentlich nicht zu gebrauchen.
Ich empfehle dir mindestens einen aus der 3.4.x Reihe. Aber jeder 3.x GCC ist für C++ wesentlich besser als der 2.95.4.
-
Habe jetzt GCC 3.0 installiert und es kompiliert wunderbar. Werde mir dann demnächst mal den GCC 3.4er ziehen und kompilieren.
Vielen Dank an alle!