Oppure

Loading
26/08/10 18:28
ElCobra91
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:


#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 26/08/10 19:11
aaa
26/08/10 18:41
nihal
Per invocare il metodo di un oggetto devi usare nomeOggetto.metodo()
Nel tuo codice:
cout << dataGiorno.displayDate() << endl;
aaa
26/08/10 19:29
ElCobra91
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::displayDate()'
note C:\Dev-Cpp\include\c++.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!!!
aaa
26/08/10 19:33
nihal
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 26/08/10 19:36
aaa
26/08/10 19:44
ElCobra91
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

aaa
26/08/10 20:14
ElCobra91
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
aaa
26/08/10 20:17
nihal
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...
aaa
26/08/10 20:33
ElCobra91
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?
aaa