データファイルを読み取って出力する関数をテストするためにコードをコンパイルしようとしていますが、理解できないコンパイルエラーが発生します。トークン"。関連するコードテキストの壁は以下の通りです。
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
エラーのある行は、GetMonthを呼び出そうとしているように見えますが、グローバルレベルでは、C++プログラムは一連の宣言で構成されています。関数呼び出しは宣言ではないため、グローバルレベルで分離して存在することはできません。定義でもある宣言を持つことができます。その場合、初期化の一部として関数を呼び出すことができます。
ただし、関数呼び出し自体は、他の関数内に含まれている必要があります。
#ifdef TEST
int main() {
GetMonth();
}
#endif
(他の返信に加えて) 'GetMonth()'関数を実行するには、別の関数( 'main'または 'main'から呼び出されるもの)から呼び出すか、オブジェクトの初期化式で使用する必要があります。名前空間スコープで宣言
double global_dummy = GetMonth();
ただし、後者の方法では初期化順序の問題が発生する可能性があるため、可能な限り前者の方法を使用することをお勧めします。
C/C++では、ヘッダーまたは実装(.c、.cpp、.cxx、etc ...)ファイルの本体に実行可能コードを単純に追加することはできません。代わりに、関数に追加する必要があります。起動時にコードを実行する場合は、必ずmainメソッドに追加してください。
int main(int argc, char *argv[]) {
GetMonth();
}
C++プログラムはグローバルコンテキストでは実行されません。つまり、GetMonthの呼び出しを実行するには、その関数に関数を組み込む必要があります。 int main() { }
が適切な場合があります。