Подтвердить что ты не робот

Ошибка: ожидаемый конструктор, деструктор или преобразование типа перед ';' фишка?

Я пытаюсь скомпилировать свой код для проверки функции для чтения и печати файла данных, но я получаю компиляционную ошибку, которую я не понимаю - "ошибка: ожидаемый конструктор, деструктор или преобразование типов до"; ' лексема". Стена соответствующего кодового текста приведена ниже.

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
4b9b3361

Ответ 1

Строка с ошибкой выглядит так, как будто вы пытаетесь вызвать GetMonth, но вы можете сделать это только внутри функции:

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

Ответ 2

(В дополнение к другим ответам.) Чтобы исправить вашу функцию "GetMonth()", вам нужно либо вызвать ее из другой функции ( "main", либо как угодно из "main" ) или использовать ее в выражении инициализации объекта, объявленного в области пространства имен, как в

double global_dummy = GetMonth();

Однако последний способ может пострадать от проблем с порядком инициализации, поэтому рекомендуется по возможности использовать прежний метод.

Ответ 3

В C/С++ вы не можете просто добавить исполняемый код в тело файла заголовка или реализации (.c,.cpp,.cxx и т.д.). Вместо этого вы должны добавить его в функцию. Если вы хотите, чтобы код запускался при запуске, обязательно добавьте его к основному методу.

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

Ответ 4

Программы С++ не выполняются в глобальном контексте. Это означает, что вам нужно поместить вызов GetMonth в функцию для его запуска. int main() { } может быть уместным.