przeładowanie operatora () w C++

reksiak
Użytkownik
Użytkownik
Posty: 41
Rejestracja: 15 sty 2005, o 23:57
Płeć: Mężczyzna
Lokalizacja: Kielce
Podziękował: 6 razy

przeładowanie operatora () w C++

Post autor: reksiak »

Mam problem z tym operatorem

Kod: Zaznacz cały

float & matrix::operator()(int i,int j)
{return macierz[i][j];}
         
A kompilator wywala błąd "Identifier '()' cannot have a type qualifier"
O co może chodzić?
Awatar użytkownika
amdfanatyk
Użytkownik
Użytkownik
Posty: 98
Rejestracja: 27 mar 2005, o 14:59
Płeć: Mężczyzna
Lokalizacja: /dev/zero
Podziękował: 9 razy
Pomógł: 7 razy

przeładowanie operatora () w C++

Post autor: amdfanatyk »

operator co zwraca referencje, troche to dziwne i chyba niepoprawne.
Xfly
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 13 mar 2006, o 20:44
Płeć: Mężczyzna
Lokalizacja: Nowogard
Podziękował: 33 razy
Pomógł: 10 razy

przeładowanie operatora () w C++

Post autor: Xfly »

Mi sie wydaje ze jest inna skladnia na przeciazanie operatorow - ale moge sie mylic bo dawno sie w to nie bawilem
Awatar użytkownika
amdfanatyk
Użytkownik
Użytkownik
Posty: 98
Rejestracja: 27 mar 2005, o 14:59
Płeć: Mężczyzna
Lokalizacja: /dev/zero
Podziękował: 9 razy
Pomógł: 7 razy

przeładowanie operatora () w C++

Post autor: amdfanatyk »

przykladowe operatory:

Kod: Zaznacz cały

//////////////////
/// Functors
//////////////////
void
XineIntFunctor::operator()( xine_cfg_entry_t* ent, int val )
{
    ent->num_value = val;
}


void
XineStrFunctor::operator()( xine_cfg_entry_t* ent, const QString& val )
{
    ent->str_value = const_cast<char*>(val.ascii());
}

void
XineBoolFunctor::operator()( xine_cfg_entry_t* ent, bool val )
{
     ent->num_value = val;
}
nie rozumiem dlaczego operator ma zwracac referencje, co innego pobrac argument przez referencje; jerzeli macierz jest typu float to nalezy zwrocic wartosc tego typu i wszystko.
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

przeładowanie operatora () w C++

Post autor: Fibik »

Referencja może się przydać:

Kod: Zaznacz cały

#define N   16
class Matrix
{
  public:

    float& operator()(int i, int j);

  float macierz[N][N];
};


inline float& Matrix::operator()(int i, int j)
{ 
  return macierz[i][j];
}

// ...


Matrix m;

for(int i = 0; i < N; i++)
 for(int j = 0; j < N; j++) 
      m(i,j) = sqrt(i*i+j*j);  // bez referencji tak nie wolno 
Błąd masz pewnie dlatego, że nie deklarujesz tej funkcji (operatora) w klasie matrix.
ODPOWIEDZ