Rola this w przeładowaniu operatorów

0

Chce dopisać definicje operatora+, do zadanej definicji klasy. Niestety napotkałem na poniższy błąd.

 class Wektor
{
    int t[ROZ];  //  #define ROZ 3
public:
    Wektor(); // wektor zlozony z samych zer
    Wektor(int *d); // wektor wypelniony danymi z d
    Wektor operator+(Wektor w); // zwraca sume wektorow

};
 
Wektor operator+(Wektor w) // zwraca sume wektorow
{
    Wektor wynik;
    for(int i=0; i<ROZ; i++)
        wynik.t[i] = this->t[i] + w.t[i];
        return wynik;
}
błąd:
 
```c
invalid use of 'this' in non-member function

"Niepoprawne użycie 'this' w ... bez członowej funkcji"?

  1. Mam ten komunikat zrozumieć w ten sposób, że nie mogę operować wskaźnikiem "this" poza definicja klasy ?
  2. Jak wobec uporać się z tym problemem?

Dziękuję za poświęcony czas!

3

Wektor Wektor::operator+(Wektor w)

a tak w ogóle to lepiej argument zrobić const Wektor& w...

0

a tak w ogóle to lepiej argument zrobić const Wektor& w

też tak uważam ale z polecenia nie mogę zmodyfikować Klasy :)

Wektor Wektor::operator+(Wektor w)

Próbowałem tylko że

Wektor::Wektor operator+(Wektor w)

Geniusz :D...

Dziękuję ;)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Edit

Mam kolejny problem, dotyczy on operatorów poza definicją klasy. Napisałem ich definicje, niestety nie posiadają one dostępu do prywatnej składowej klasy. W zadaniu nie mogę zmodyfikować poniższego kodu ( nic dodac do klasy w ogole zadnych modyfikacji). To tak u diabła mam odnieść się do zmiennej prywatnej, jak operatory sa poza Klasa? Czy to błąd w treści zadania ?
int t[ROZ];

class Wektor
{
    int t[ROZ]; 
public:
   // Wektor(); // wektor zlozony z samych zer
    //Wektor(int *d); // wektor wypelniony danymi z d
    //Wektor operator+(Wektor w); // zwraca sume wektorow
   // Wektor operator-(Wektor w); // zwraca roznice wektorow
    //int operator*(Wektor w); // iloczyn skalarny dwoch wektorow
    //Wektor operator*(int i); // iloczyn wektor * liczba
   // int operator[](int i); // zwraca t[i]
};
ostream & operator <<(ostream & str, Wektor w); // wypisuje wektor na ekranie
Wektor operator *(int i, Wektor w); // iloczyn liczba*wektor 

Tutaj moje definicjie przeladowanych operatorow, program dziala tylko jak int t[ROZ]; posiada modyfikator dostepu jako publiczny

 ostream & operator <<(ostream & str, Wektor w)
{
    str << "(" << w.t[0] << "," << w.t[1] << "," << w.t[2] << ")";
    return str;
}

Wektor operator *(int i, Wektor w) // iloczyn liczba*wektor
{
    Wektor wynik;
    for(int j=0; j<ROZ; j++)
        wynik.t[j] = w.t[j] * i;
    return wynik;
}
1

Nie możesz. Musiałbyś zaprzyjaźnić tą kasę z operatorem na przykład.

1 użytkowników online, w tym zalogowanych: 0, gości: 1