Newsgroup: it.comp.lang.c++
Titolo: overloading degli oeratori

Ciao a tutti,
ho un piccolo problema con l'overloading degli operatori:
questa è la mia classe Time:
#ifndef TIME_H
#define TIME_H
 
class Time {
        public:
                Time(int = 0, int = 0, int = 0);
                void printMilitary();
                void printStandard();
                void setTime(int, int, int);
                void setCurrent();
                bool operator==(Time &);
        private:
                int hour;       // 0-23
                int min;        // 0-59
                int sec;        // 0-59
};
 
#endif
In cui spicca il prototipo della funzione operator==(Time &).
Ecco l'implementazione di detta funzione membro:
 bool Time::operator==(Time & right)
      {
              if (hour == right.hour && min == right.min && sec == right.sec)
                      return true;
	      else return false;	
      }
A me sembra tutto a posto, ma g++ mi da questo errore:
alarm_main.cpp: In function `int main()':
alarm_main.cpp:29: no match for `Time == Time' operator
time.h:13: candidates are: bool Time::operator==(Time&)
alarm_main.cpp:31: parse error before `)' token
Dato che ci sono ho ancora un piccolo dubbio: la mia classe Alarm
#include "time.h"
 
#ifndef ALARM_H
#define ALARM_H
 
class Alarm {
        public:
                Alarm(int = 0, int = 0, int = 0);
                void setAlarm(int, int, int);
                Time getAlarm();
                void showAlarm();
                void showTime();
                void setCurrent();
                Time getCurrent();
                void setSuonato(bool);
                bool getSuonato();
        private:
                Time current;
                Time alarm;
                bool suonato;
};
 
 
#endif
Ha il suo bel prototipo di setSuonato(bool) che dovrebbe modificare semblicemente il dato membro booleano in questo modo:
while (!al.getSuonato())
     27         {
     28                 al.setCurrent();
     29                 if (al.getCurrent() == al.getAlarm())   
     30                 {
     31                         for (int i = 0, i < 10, i++)
     32                                 cout << "\a. " << endl;
     33                         al.setSuonato(test);
     34                 }
     35         }
ma la chiamata di setSuonato alla riga 33 mi da questo bell'errore:
alarm_main.cpp:33: could not convert `(&al)->Alarm::setSuonato(bool)(test)' to
   `bool'
alarm_main.cpp:34: parse error before `}' token
Dove sbaglio? scusate la banalità, ma sto cercando di imparare il C++ da solo, ed alcuni dubbi sono davvero impossibili da svelare da solo...
tnx
gabo

  bool Time::operator==(Time & right)
prova con
bool& Time::operator==(Time & right)
ciao!


 s/,/;/
Max

  s/,/;/
qui dovevo essere un po' fuso...
grazie ancora 
gabo



Ottimo, funziona tutto e compila pure... ma ora ho ancora un problemino:
Quando raggiungo l'ora esatta deve suonare l'allarme, come faccio per
esempio a far suonare un mp3? (io penso che devo chiamare xmms o chi per
esso e passargli in input il file, alla faccia della portabilità...) 
suggerimenti? (che non siano: scriviti un player mp3, se possibile :))
tnx
gabo

  portabilità...) 
man 3 exec
dopodichè, ovviamente, metti in un file di configurazione il nome
dell'eseguibile in maniera che ognuno possa inserire il proprio
programma preferito.
Alternativamente, puoi cercarti una libreria per suonare file audio ed
usare quella (per esempio potrebbero essercene di portabili sul sito
delle libSDL).
Ciao
Vince

ottimo, grazie a tutti!!
ciao 
gabo