1. ホーム
  2. c++

[解決済み] このスコープで宣言されていない」エラー

2022-03-01 23:57:44

質問

私は、ガウシアンアルゴリズムを使って、任意の日付の日を計算する簡単なプログラムを書いていました。 ここで .

#include <iostream>
using namespace std;

//Using the Gaussian algorithm
int dayofweek(int date, int month, int year ){
    int d=date;
    if (month==1||month==2)
        {int y=((year-1)%100);int c=(year-1)/100;}
    else
        {int y=year%100;int c=year/100;}
    int m=(month+9)%12+1;
    int product=(d+(2.6*m-0.2)+y+y/4+c/4-2*c);
    return product%7;
}

int main(){
    cout<<dayofweek(19,1,2054);
    return 0;
}

とてもシンプルなプログラムですが、さらに不可解なのはその出力です。

:In function  dayofweek(int, int, int)’:
:19: warning:  unused variable ‘y’
:19: warning: unused variable ‘c’
:21: warning: unused variable ‘y’
:21: warning: unused variable ‘c’
:23: error: ‘y’ was not declared in this scope
:25: error: ‘c’ was not declared in this scope

私の変数は未使用だと言っているのに、宣言されていないと言うのですか?何が問題なのか、どなたか教えてください。

どうすればいいですか?

変数のスコープとは、常にその変数が含まれているブロックのことです。たとえば、次のような場合です。

if(...)
{
     int y = 5; //y is created
} //y leaves scope, since the block ends.
else
{
     int y = 8; //y is created
} //y leaves scope, since the block ends.

cout << y << endl; //Gives error since y is not defined.

解決策は、ifブロックの外側でyを定義することです。

int y; //y is created

if(...)
{
     y = 5;
} 
else
{
     y = 8;
} 

cout << y << endl; //Ok

あなたのプログラムでは、y と c の定義を if ブロックから上位スコープに移動する必要があります。そうすると、Functionは次のようになります。

//Using the Gaussian algorithm
int dayofweek(int date, int month, int year )
{
    int y, c;
    int d=date;

    if (month==1||month==2)
    {
         y=((year-1)%100);
         c=(year-1)/100;
    }
    else
    {
         y=year%100;
         c=year/100;
    }
int m=(month+9)%12+1;
int product=(d+(2.6*m-0.2)+y+y/4+c/4-2*c);
return product%7;
}