Instanz als automatisches Objekt anlegen g++-4 Fehler - MS VC++ OK
-
class Qarray2 { double *m; // pointer to array unsigned int xmax,ymax; // maximum dimension for columns and rows public: // WARNING: None of the constructors sets up (reserves space for) an array! Qarray2(); // declare a 2d array with no dimensions Qarray2(const unsigned int y,const unsigned int x); // declare a 2d array ~Qarray2(); int init(const unsigned int y=0,const unsigned int x=0); double& operator () (const unsigned int y,const unsigned int x) const; unsigned int yMax() {return ymax;} unsigned int xMax() {return xmax;} }; inline Qarray2::Qarray2() {xmax=0; ymax=0;} inline Qarray2::Qarray2(unsigned int y,unsigned int x) {xmax=x; ymax=y;} ... int main(int argc,char *argv[]) { cout << "Qarray2 demo program" << endl; Qarray2 a = Qarray2(); // Declare 2D-array - g++-4 Fehler, MS VC++ 2010 OK ...Obiges geht unter Visual C++ 2010 und das Beispielprogramm funktioniert auch perfekt.
Ich habe es unter Cygwin mit g++-4 getestet und da kommt beim Erzeugen des arrays schon beim Compilieren ein Fehler.
Man kann doch Klassen auch im automatischen Speicher anlegen (auf dem Stack). Da die Klasse den Speicher für das eigentliche Array auch auf dem dynamischen Speicher (Heap) anlegt, und selbst nicht allzu groß ist, sollte das ja auch kein Problem darstellen.
BTW: Was bewirkt das const hinter dem überladenen Function Call Operator ( operator() )? Das Programm funktioniert genau so auch ohne (ich kann Elemente im Array beschreiben und lesen):
... a.init(3,4); // DIM a with 3 rows, 4 columns a(0,0)=1; a(0,1)=2; a(0,2)=3; a(0,3)=4; a(1,0)=-1; a(1,1)=-2; a(1,2)=-3; a(1,3)=-4; a(2,0)=11; a(2,1)=12; a(2,2)=13; a(2,3)=14; int y; int x; for (y=0; y < a.yMax(); y++) { for (x=0; x < a.xMax(); x++) { cout << a(y,x) << " "; } cout << endl; }
-
Meine Glaskugel ist kaputt. Welchen Fehler bekommst Du?
Const in der Signatur einer Memberfunktion sagt, dass diese das Objekt nicht verändern darf und nur const zeiger oder Referenzen auf member zurück geben darf.
Zeiger und Referenzen auf andere objekte sind aber erlaubt, wenn auch unüblich.
Mfg Martin
-
mgaeckler schrieb:
Meine Glaskugel ist kaputt. Welchen Fehler bekommst Du?
Hm' bin mir nicht mehr sicher ob ich überhaupt einen Compile-Fehler bekommen habe. Das Problem: Cygwin mit g++-4 habe ich nur in der Arbeit, MS VS 2010 nur zu Hause. Hatte heute in der Arbeit was verändert, was ich vorher reingebaut hatte, damit es überhaupt lief. Und plötzlich funktionierte es, und war sogar lauffähig (war es vorher definitiv nicht, es gab mindestens einen Stackdump unter g++). Kann ich leider nicht mehr nachvollziehen, was letztendlich den Fehler verursacht hatte.
mgaeckler schrieb:
Const in der Signatur einer Memberfunktion sagt, dass diese das Objekt nicht verändern darf und nur const zeiger oder Referenzen auf member zurück geben darf.
Zeiger und Referenzen auf andere objekte sind aber erlaubt, wenn auch unüblich.
Vielen Dank für die Erklärung.
MfG Peter