PCMasters Hardware Forum > Software > GFX, Webdesign und Programmierung > Seite 16 > C++ operator[] und operator+

Im PC Forum registrieren


Produktsuche
IDEALO-PRODUKT-SUCHE
idealo preisvergleich
PCM News & Reviews
Antwort
 
 
Alt 08.07.2008, 12:51
Threadersteller
Tima22
 
Standard

C++ operator[] und operator+



Hallo
Ich spiele da etwas mit c++ und stehe nun vor einem problem den ich nicht verstehe

Also hier stark verkürzte variante:
Code:
class Matrix
{
    public:
        Matrix(int zeile, int spalte);
        int& operator[](int element);
        int& element(int i, int j) const;
        Matrix operator+ (const Matrix& m1);
        int mat_zeilen_ausgabe() const;
        int mat_spalten_ausgabe() const;
        ~Matrix();
    private:
        int firstdim;
        int seconddim;
        int** matrize;
};

//ZuKlein und Zugross sind Fehlerklassen
//also es fängt bei 0 an und geht bis spalte*zeile -1
int& Matrix::operator[](int element)
{
    int zeile = 0;
    int spalte = 0;
    if (element < 0)
    {
        throw ZuKlein();    //element < 0 => fehler
    }
    if (element < (firstdim * seconddim))
    {
        zeile = element / seconddim;
        spalte = element % seconddim;
        return matrize[zeile][spalte];
    }
    else
    {
        throw ZuGross();    //element außer array => fehler
    }
}

//--------Problem!---------
Matrix Matrix::operator+ (const Matrix& m1)
{
    if ((m1.mat_zeilen_ausgabe() != this->firstdim) || (m1.mat_spalten_ausgabe() != this->seconddim))
    {
        throw NoPossible(); //addition nicht möglich
    }
//---------result matrix-------
    Matrix result(this->firstdim, this->seconddim);
#ifdef VAR_ONE
    for (int i = 0; i < this->firstdim -1; ++i)
    {
        for (int j = 0; j < this->seconddim -1; ++j)
        {
            result.element(i,j) = this->element(i,j) + m1.element(i,j);
        }
    }
#endif
#ifdef VAR_TWO
    for (int i = 0; i < ((this->firstdim * this->seconddim)-1); ++i)
    {
        result[i] = this->operator[](i) * m1[i];
    }
#endif
    std::cout << "addition" << std::endl;
    return result;
}
Ich möchte einfach schreiben können
Code:
int main()
Matrix m1(3,4); Matrix m2(3,4); Matrix m3(3,4);
m3 = m1 + m2;
In cygwin geht nicht, in gegensatz zu dev-c++, aber DAS Problem liegt in m1[i], wofür soll m1[i] nicht implementiert worden sein...in gegensatz zu rest
Code:
result[i] = this[i] * m1[i];
Habe dafür 2 varianten versucht, die 2te variante wäre mir lieber, aber es gibt fehler, dass operator[i] nicht implementiert wäre. Wenn ich schreibe m1.operator[](i) gibt er fehler das m1.operator[](i&) nicht implementiert wäre.

Und bei 1er variante ist mein stack corupted - also irgendwo zugriffsfehler - aber wie gesagt - das sollte nur eine notlösung sein, ich möchte eigentlich mit operator[] machen.

Weis jemand wie es geht bzw wieso es so nicht geht?

Ja, und die 2 hilfsfunktionen
Code:
int mat_zeilen_ausgabe() const;
int mat_spalten_ausgabe() const;
hatte ich zuerst weder als const deklariert, noch definiert, aber der kompiler konnte diese nicht finden und schlug mit const vor - also hatte er diese als const gesehen - weiß einer wieso er die als const ansieht?
Alt Heute
Hardware Bot
Computer Informationen
 
Diese Werbung wird registrierten
Mitgliedern nicht angezeigt.
Werden Sie noch heute kostenlos Mitglied
auf PCMasters.de
Standard Weitere Informationen

hardware forum Neue Frage stellen?
Kurze Zusammenfassung der Frage:
Bitte wählen Sie eine Kategorie:
Mailadresse:
Ihre Frage:
Ihre Frage wird als Gast gespeichert. Sollte eine Antwort im Forum erfolgen, bekommen Sie diese per Email zugeschickt.


Antispam, bitte die folgende Aufgabe lösen: 
 
Um auf dieses Thema zu ANTWORTEN
bitte sich zuerst » hier kostenlos registrieren!!

Antwort

Tags:



Sie betrachten gerade: C++ operator[] und operator+


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.



Im PC Forum registrieren