2009-10-15 11 views
13

Estoy intentando compilar mi código para probar una función para leer e imprimir un archivo de datos, pero obtengo un error de compilación que no entiendo: "error: constructor, destructor o conversión de tipo esperados antes de ';' simbólico". La pared del código-texto relevante está debajo.Error: constructor, destructor o conversión de tipo esperados antes de ';' ¿simbólico?

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

No puede simplemente llamar a GetMonth() aquí. ponerlo en main() .... – alexkr

Respuesta

19

La línea con el error parece que está tratando de llamar GetMonth - pero sólo se puede hacer eso en el interior de una función:

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

Puede llamar a una función fuera de una función, si es un inicializador. Consulte la respuesta de AndreyT: http://stackoverflow.com/questions/1573168/error-expected-constructor-destructor-or-type-conversion-before-token/1573344#1573344 –

4

En C/C++, no se puede simplemente añadir código ejecutable en el cuerpo de un encabezado o archivo de implementación (.c, .cpp, .cxx, etc ...). En cambio, debes agregarlo a una función. Si desea que el código se ejecute al inicio, asegúrese de agregarlo al método principal. programas

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

C++ no se ejecutan en un contexto global. Esto significa que debe poner la llamada a GetMonth en una función para que se ejecute. int main() { } podría ser apropiado.

16

(Además de otras respuestas.) Para ejecutar su función 'GetMonth()' tiene que llamarlo desde otra función ('main' o lo que sea llamado desde 'main') o usarlo en el inicializador expresión de un objeto declarado en el ámbito del espacio de nombres, como en

double global_dummy = GetMonth(); 

Sin embargo, este último método puede sufrir de problemas de orden de inicialización, por lo que se recomienda utilizar el método anterior siempre que sea posible.

+1

+1 para mencionar el inicializador global. –

Cuestiones relacionadas