ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
ciao a tutti,sono nuovo di questo forum.Ho da poco iniziato a studiare il c++ e ho un problema su un programmino per visualizzare la data,infatti quando vado a compilare il progetto(ho separato l'interfaccia dall'implementazione) con DEV c++ mi dice:
In function `int main()':
`displayDate' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
[Build Error] [Orario.o] Error 1
ecco il codice,graziein anticipo per il vostro aiuto:
Codice sorgente - presumibilmente C++ |
#include<iostream> #include "Date.h" using namespace std; int main() { int Anno; int Mese; int Giorno; cout<<"inserisci il giorno attuale"<<endl; cin>> Giorno; cout<<endl; cout<<"inserisci il mese corrente"<<endl; cin>>Mese; cout<<endl; cout<<"inserisci l'anno corrente"<<endl; cin>>Anno; cout<<endl; cout<<endl; Date dataGiorno( Giorno, Mese, Anno );//creo un oggetto dataGiorno da passare al costruttore cout << "verifica dei numeri inseriti \n" ; cout << displayDate()<<endl ; } #include<iostream> #include<string> using namespace std; class Date { public: Date(int,int,int); void setDate(int,int,int); int getDayDate(); int getMonthDate(); int getYearDate(); void displayDate(); private: int year; int month; int day; }; #include<iostream> #include "Date.h" using namespace std; Date::Date(int giorno, int mese, int anno) { setDate(giorno, mese, anno); } void Date::setDate(int giorno, int mese, int anno) { if (giorno > 31) { cout << "Non esiste un mese con più di 31 giorni.Il giorno è impostato al primo del mese" << endl; giorno=1; giorno= day; } if (mese > 12 ) { cout << "Non esistono più di 12 mesi.Il mese è impostato per default all'1" << endl; mese=1; mese= month; } if (anno < 2010) { cout << "Siamo nel 2010, non vivere nel passato.L'anno è impostato per default a l 2011" << endl; anno=2011; anno=year; } giorno= day; mese=month; anno=year; }//fine setDate int Date::getDayDate() { return day; }//fine getDate int Date::getMonthDate() { return month; } int Date::getYearDate() { return year; } void Date::displayDate() { cout<< " Oggi è il: \n" << getDayDate()<<" "<< getMonthDate()<<" "<<getYearDate()<<endl; }//fine displayDate
|
EDIT by HeDo: Codice non racchiuso tra tag code!
Ultima modifica effettuata da HeDo il 26/08/2010 alle 21:11 |
|
nihal (Ex-Member)
Pro
Messaggi: 109
Iscritto: 12/04/2010
|
Per invocare il metodo di un oggetto devi usare nomeOggetto.metodo()
Nel tuo codice:
Codice sorgente - presumibilmente Plain Text |
cout << dataGiorno.displayDate() << endl;
|
|
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
ho provato e non funziona, e poi come potrebbe funzionare? dataGiorno contiene gli argomenti da passare al costruttore e non alla funzione displayDate.
Cmq se provo a fare come hai detto mi dice:
In function `int main()':
26 no match for 'operator<<' in 'std::cout << (&dataGiorno)->Date:isplayDate()'
note C:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:63 candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
non capisco quale sia l'errore sul codice che ho scritto all'inizio.In pratica non riconosce la funzione,dice che noo è stata dichiarata ma io l'ho fatto...HELP!!!
|
|
nihal (Ex-Member)
Pro
Messaggi: 109
Iscritto: 12/04/2010
|
Adesso che guardo bene il tuo codice noto che la displayDate() usa già cout, quindi non hai bisogno di usare cout << dataGiorno.displayDate() << endl; ma ti basta fare dataGiorno.displayDate();
Ultima modifica effettuata da nihal il 26/08/2010 alle 21:36 |
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
se scrivo solo dataGiorno.displayDate() me lo compila senza errori però qualunque numero inserisco per giorno mese e anno mi da sempre come risultato
giorno 0
mese 0
anno 1976021473
|
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
trovati gli errori.
Quando dfinisco la funzione setDate ho fatto confusione con l'operatore di assegnamento =
perchè io avevo scritto giorno= day ecc ma il valore iniziale di day non lo ho, è il numero contenuto nella variabile giorno che deve essere assegnato a day.cmq grazie mille per l'aiuto.Ciaociao
|
|
nihal (Ex-Member)
Pro
Messaggi: 109
Iscritto: 12/04/2010
|
Resta comunque il fatto che per invocare il metodo di un oggetto devi usare oggetto.metodo(), non come avevi fatto tu... Perchè il compilatore non sa se è una variabile o metodo o vattenapesca...
|
|
ElCobra91 (Normal User)
Newbie
Messaggi: 18
Iscritto: 22/08/2010
|
hai ragione, allora,tanto per vedere se ho capito, quando io creo l'oggetto dataGiorno(Giorno, Mese, Anno) i valori di Giorno Mese e Anno li passa al costruttore, poi io cmq per poter utilizzare una funzione della classe devo utilizzare sempre la forma oggetto.funzione() giusto?
|
|
nihal (Ex-Member)
Pro
Messaggi: 109
Iscritto: 12/04/2010
|
Praticamente tu hai creato una data (oggetto di tipo Date), con determinati giorno, mese e anno. Quindi, per poter mostrare la data a schermo, devi invocare il metodo displayDate() relativo a QUELL\'oggetto data...
|
|