PDA

View Full Version : [C++] Passaggio array bidimensionale a operator <<


pixie
11-09-2010, 15:20
Salve. Ho un problema di questo tipo:

ofstream & operator <<(ofstream & evento_i_w, data_giorno& dg, eventi e[][dg.c_mm] ) { ...
}

int main(){
...
evento_i_w << e[dg.c_gg][dg.c_mm]; }

Gli errori a compile time sono:
main_prove.cpp:383: error: `std::ofstream& operator<<(std::ofstream&)' must take exactly two arguments;

main_prove.cpp:659: error: no match for 'operator<<' in 'evento_i_w << e[dg.data_giorno::c_gg][dg.data_giorno::c_mm];

Il primo errore mi è chiaro anche se però ho la necessità di utilizzare l'oggetto dg della classe data_giorno come parametro dell'operator.
Il secondo errore no. Spero possiate aiutarmi grazie

pixie
12-09-2010, 20:52
Vi prego :help: :(

tomminno
13-09-2010, 07:59
Salve. Ho un problema di questo tipo:

ofstream & operator <<(ofstream & evento_i_w, data_giorno& dg, eventi e[][dg.c_mm] ) { ...
}

int main(){
...
evento_i_w << e[dg.c_gg][dg.c_mm]; }

Gli errori a compile time sono:
main_prove.cpp:383: error: `std::ofstream& operator<<(std::ofstream&)' must take exactly two arguments;

main_prove.cpp:659: error: no match for 'operator<<' in 'evento_i_w << e[dg.data_giorno::c_gg][dg.data_giorno::c_mm];

Il primo errore mi è chiaro anche se però ho la necessità di utilizzare l'oggetto dg della classe data_giorno come parametro dell'operator.
Il secondo errore no. Spero possiate aiutarmi grazie

Il secondo errore è conseguenza del primo. Non avendo definito l'operatore correttamente il compilatore non ne trova la definizione, da qui l'errore.
Per il primo, come dice il compilatore, gli argomenti devono essere 2, credo che dovresti rifattorizzare il codice se proprio ti serve quell'operatore.

pixie
13-09-2010, 08:34
Il secondo errore è conseguenza del primo. Non avendo definito l'operatore correttamente il compilatore non ne trova la definizione, da qui l'errore.
Per il primo, come dice il compilatore, gli argomenti devono essere 2, credo che dovresti rifattorizzare il codice se proprio ti serve quell'operatore.

Scusa Tomminno non per fare il noioso anche perchè non è da me comunque non sapendo cosa significhi "rifattorizzare" ho cercato sul nostro amico Google:

La rifattorizzazione è il procedimento con il quale si prende del codice funzionante e lo si modifica in modo che funzioni meglio.
Di solito, “meglio” significa “più velocemente”, sebbene possa anche significare “che usa meno memoria” oppure “che usa meno spazio su disco” o semplicemente “in modo più elegante”.

Io devo farlo andare e basta questo programma. Che sia elegante e più veloce ci penso in un secondo momento.
Non riesco a capire come risolvere questo problema. Avete qualche idea? Grazie!

tomminno
13-09-2010, 08:53
Io devo farlo andare e basta questo programma. Che sia elegante e più veloce ci penso in un secondo momento.
Non riesco a capire come risolvere questo problema. Avete qualche idea? Grazie!

Quell'operatore accetta solo 2 parametri, c'è poco da fare. Io consigliavo il refactoring proprio per fare in modo di avere il numero di parametri giusto.

pixie
13-09-2010, 10:06
Quell'operatore accetta solo 2 parametri, c'è poco da fare. Io consigliavo il refactoring proprio per fare in modo di avere il numero di parametri giusto.

Ok mi sono letto qualcosa circa questo refactoring però sono sempre al punto di partenza. Ho questo array bidimensionale di oggetti e devo per forza di cose passarlo all'operator che a sua volta chiama la funzione di scrittura su file all'interno di una classe.

pixie
13-09-2010, 21:25
Ma sono tutti in vacanza? :(

cionci
14-09-2010, 11:40
ofstream & operator <<(ofstream & evento_i_w, data_giorno& dg, eventi e[][dg.c_mm] )

Non può avere tre parametri...