2009-10-15 9 views
13

Ich versuche, meinen Code zu kompilieren, um eine Funktion zum Lesen und Drucken einer Datendatei zu testen, aber ich bekomme einen Kompilierungsfehler, den ich nicht verstehe - "error: expected constructor, destructor oder type conversion before ';' Zeichen". Die Wand des relevanten Code-Textes ist unten.Fehler: erwarteter Konstruktor, Destruktor oder Typkonvertierung vor ';' Zeichen?

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

Sie können GetMonth() nicht einfach hier aufrufen. setzen Sie es in main() .... – alexkr

Antwort

19

Die Zeile mit dem Fehler, wie Sie GetMonth zu nennen sind versucht, sieht - aber Sie können diese innerhalb einer Funktion nur tun:

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

Sie können eine Funktion außerhalb einer Funktion aufrufen, wenn es ein Initialisierer ist. Siehe Antwort von AndreyT: http://stackoverflow.com/questions/1573168/error-expected-constructor-destructor-or-type-conversion-before-token/1573344#1573344 –

4

In C/C++, können Sie nicht einfach hinzufügen ausführbaren Code in den Hauptteil einer Header- oder Implementierungsdatei (.c, .cpp, .cxx, etc ...). Stattdessen müssen Sie es zu einer Funktion hinzufügen. Wenn Sie möchten, dass der Code beim Start ausgeführt wird, stellen Sie sicher, dass er zur Hauptmethode hinzugefügt wird.

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

C++ - Programme werden nicht in einem globalen Kontext ausgeführt. Das bedeutet, dass Sie den Aufruf von GetMonth in eine Funktion einfügen müssen, damit er ausgeführt werden kann. int main() { } könnte angebracht sein.

16

(Zusätzlich zu anderen Antworten.) Um Ihre 'GetMonth()' Funktion auszuführen, müssen Sie sie entweder von einer anderen Funktion aufrufen ('main' oder was auch immer von 'main' aufgerufen wird) oder im Initialisierer verwenden bei Namespace Umfang Ausdruck eines Objekts erklärt, wie in

double global_dummy = GetMonth(); 

Allerdings könnte diese Methode von Initialisierungsreihenfolge Problemen leiden, weshalb es die erste Methode zu verwenden, wann immer möglich, wird empfohlen.

+1

+1 für Erwähnung globaler Initialisierer. –

Verwandte Themen