“未在此范围内声明”错误

新手上路,请多包涵

所以我正在编写这个简单的程序来使用 此处 找到的高斯算法计算任何日期的日期。

 #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

它说我的变量未使用,但又说它没有声明?谁能告诉我怎么了。

原文由 cortex 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

变量的范围始终是它所在的块。例如,如果您执行类似的操作

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 块移到更高的范围内。您的函数将如下所示:

 //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;
}

原文由 Haatschii 发布,翻译遵循 CC BY-SA 3.0 许可协议

我只是想补充一点,对我来说,错误是由于其中一个文件头保护中的粗心错误造成的。代替:

 #ifndef MY_AWESOME_HEADER_H
#define MY_AWESOME_HEADER_H
...
#endif // MY_AWESOME_HEADER_H

我有

#ifdef MY_AWESOME_HEADER_H
#define MY_AWESOME_HEADER_H
...
#endif // MY_AWESOME_HEADER_H

原文由 Sandeep 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题