2009-10-15 9 views
13

Sto provando a compilare il mio codice per testare una funzione per leggere e stampare un file di dati, ma ottengo un errore di compilazione che non capisco - "errore: costruttore, distruttore o conversione prevista prima di"; " gettone". Il muro del codice-codice rilevante è sotto.Errore: costruttore previsto, distruttore o conversione del tipo prima di ';' gettone?

struct Day 
{ 
    int DayNum; 
    int TempMax; 
    int TempMin; 
    double Precip; 
    int TempRange; 
}; 

struct Month 
{ 
    Day Days[31]; 
    int MonthMaxTemp; 
    int MonthMinTemp; 
    double TotalPrecip; 
    int MonthMaxTempRange; 
    int MonthMinTempRange; 
    double AverageMaxTemp; 
    double AverageMinTemp; 
    int RainyDays; 
    double AveragePrecip; 
}theMonth; 

double GetMonth(); 

double GetMonth() 
{ 
    for (int Today = 1; Today < 31; Today++) 
    { 
     cout << theMonth.Days[Today].TempMax << theMonth.Days[Today].TempMin; 
     cout << theMonth.Days[Today].Precip; 
    } 
    return 0; 
} 

GetMonth(); // compile error reported here 
+0

Non puoi chiamare semplicemente GetMonth() qui. inserirlo in main() .... – alexkr

risposta

19

La linea con l'errore sembra che si sta cercando di chiamare GetMonth - ma si può fare solo all'interno di una funzione:

#ifdef TEST 
int main() { 
    GetMonth(); 
    return 0; 
} 
#endif 
+0

È possibile chiamare una funzione al di fuori di una funzione, se è un inizializzatore. Vedi la risposta di AndreyT: http://stackoverflow.com/questions/1573168/error-expected-constructor-distructor-or-type-conversion-before-token/1573344#1573344 –

4

In C/C++, non si può semplicemente aggiungere codice eseguibile nel corpo di un file di intestazione o implementazione (.c, .cpp, .cxx, ecc.). Invece devi aggiungerlo a una funzione. Se vuoi che il codice funzioni all'avvio, assicurati di aggiungerlo al metodo principale.

int main(int argc, char *argv[]) { 
    GetMonth(); 
} 
3

I programmi C++ non vengono eseguiti in un contesto globale. Ciò significa che è necessario mettere la chiamata a GetMonth in una funzione per l'esecuzione. int main() { } potrebbe essere appropriato.

16

(Oltre alle altre risposte). Per eseguire la funzione 'GetMonth()' è necessario chiamarlo da un'altra funzione ('main' o qualsiasi cosa venga chiamata da 'main') o utilizzarlo nell'inizializzatore espressione di un oggetto dichiarato al perimetro namespace, come in

double global_dummy = GetMonth(); 

Tuttavia, quest'ultimo metodo potrebbe soffrono di problemi di ordine inizializzazione, motivo per cui si consiglia di utilizzare il primo metodo, quando possibile.

+1

+1 per menzionare l'inizializzatore globale. –

Problemi correlati