Klassen, Arrays und Referenzen



  • Hallo,
    ich bin recht neu in cpp unterwegs und versuche gerade eine Klasse für Vektorrechnung zu schreiben. Auf die x, y und z Werte des Vektors möchte ich sowohl über ein Array, als auch über die Referenzen x, y und z zugreifen.

    Ich habe bereits Referenzen und Zeiger probiert zu verwenden.

    class Vector {
    	public:
    		double 	xxvalues[3];
    		double  &x = xxvalues[0];
    

    Es erscheint immer der Fehler:

    /Users/aa/Desktop/vector.cpp:9: error: 'Vector::xxvalues' cannot appear in a constant-expression
    /Users/aa/Desktop/vector.cpp:9: error: an array reference cannot appear in a constant-expression
    /Users/aa/Desktop/vector.cpp:9: error: ISO C++ forbids initialization of member 'x'
    /Users/aa/Desktop/vector.cpp:9: error: making 'x' static
    /Users/aa/Desktop/vector.cpp:9: error: invalid in-class initialization of static data member of non-integral type 'double&'
    

    Vielen Dank schon einmal.



  • double  &x = xxvalues[0];
    

    Kannst du in Klassendefinitionen so nicht schreiben. Initialisierungen werden mit einer gleichnamigen Initialisierungsliste im Konstruktor durchgeführt:

    Vector()://Doppelpunkt leitet Initialisierungsliste ein
    x(xxvalues[0]) 
    {
       //....
    

    Außerdem, für Vektor/Matrizen Rechnungen gibt es std::valarray & co. aus der Standardbibliothek. Für Arrays könntest du auch STL-Container (hier bspw. std::vector ) verwenden. Geschwindigkeit zählt doch hier nicht.



  • Kompilier mit -std=c++11 bzw -std=c++0x.



  • Kellerautomat schrieb:

    Kompilier mit -std=c++11 bzw -std=c++0x.

    Das feature ist mir bekannt, mein GCC (und ich bin mir sicher, sein Compiler ebenfalls) unterstützen non-static data member initializers (noch) nicht.



  • Vielen Dank,
    das mit der angepassten Initialisierungsliste hat geholfen.

    C++ ist halt doch kein Java 😛



  • Zum Glück.


Log in to reply