2009-10-15 14 views
13

Próbuję skompilować mój kod, aby przetestować funkcję odczytu i wydruku pliku danych, ale pojawia się błąd kompilacji, którego nie rozumiem - "błąd: oczekiwany konstruktor, destruktor lub konwersja typu przed"; znak". Ściana odpowiedniego kodu-tekstu znajduje się poniżej.Błąd: oczekiwany konstruktor, destruktor lub konwersja typu przed ';' znak?

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

Nie możesz po prostu wywołać metody GetMonth() tutaj. umieścić go w głównej() .... – alexkr

Odpowiedz

19

Linia z błędem wygląda próbujesz zadzwonić getMonth - ale można to zrobić tylko, że wewnątrz funkcji:

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

Możesz wywołać funkcję poza funkcją, jeśli jest inicjatorem. Zobacz odpowiedź AndreyT: http://stackoverflow.com/questions/1573168/error-expected-constructor-destructor-or-type-conversion-before-token/1573344#1573344 –

4

w C/C++, nie można po prostu dodać kod wykonywalny w treści pliku nagłówkowego lub implementacji (.c, .cpp, .cxx, etc ...). Zamiast tego musisz dodać go do funkcji. Jeśli chcesz, aby kod działał podczas uruchamiania, dodaj go do głównej metody.

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

Programy w języku C++ nie są wykonywane w kontekście globalnym. Oznacza to, że musisz wywołać funkcję GetMonth w funkcji, która będzie uruchamiana. int main() { } może być odpowiednie.

16

(Oprócz innych odpowiedzi.) Aby wykluczyć funkcję "GetMonth()", musisz wywołać ją z innej funkcji ("main" lub cokolwiek jest wywoływana z "main") lub użyć jej w inicjalizatorze wyrażenie obiektu zadeklarowana w zakresie przestrzeni nazw, jak w

double global_dummy = GetMonth(); 

jednak ta ostatnia metoda może cierpieć z powodu problemów z zamówieniem inicjalizacji, dlatego zaleca się, aby skorzystać z dawną metodę miarę możliwości.

+1

+1 za wspomnienie globalnego inicjalizatora. –

Powiązane problemy