首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >变量错误:‘C++’未在此作用域中声明

变量错误:‘C++’未在此作用域中声明
EN

Stack Overflow用户
提问于 2021-05-07 16:20:21
回答 4查看 76关注 0票数 0

我有一个简单的C++程序,当我试图编译它时,我得到了两个错误:'klasa' was not declared in this scope 'oznaka' was not declared in this scope

有人知道我怎么才能修复它吗?

注意:我仍然是C++的初学者。:]

代码语言:javascript
运行
复制
#include <iostream>
#include <string>
using namespace std;

int main(){
    int T;
    cin >> T;

    if(T>=73){
        string klasa = "A";
        string oznaka = "XL";
    }
    else if(63<=T && T<73){
        string klasa = "A";
        string oznaka = "L";
    }
    else if(53<=T && T<63){
        string klasa = "A";
        string oznaka = "M";
    }
    else if(43<=T && T<53){
        string klasa = "A";
        string oznaka = "S";
    }
    else if(T<43){
        string klasa = "B";
        string oznaka = "XS";
    }

    cout << klasa << " " << oznaka;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-05-07 16:30:18

错误的原因是您在"if语句“中声明了klasaoznaka中的每一个,因此您只能在它们的作用域内(即在它们各自的"if语句”中)访问这些变量。

代码语言:javascript
运行
复制
#include <iostream>
#include <string>
using namespace std;

int main(){
    int T;
    cin >> T;
    string klasa = "";
    string oznaka = "";

    if(T>=73){
        klasa = "A";
        oznaka = "XL";
    }
    else if(63<=T && T<73){
        klasa = "A";
        oznaka = "L";
    }
    else if(53<=T && T<63){
        klasa = "A";
        oznaka = "M";
    }
    else if(43<=T && T<53){
        klasa = "A";
        oznaka = "S";
    }
    else if(T<43){
        klasa = "B";
        oznaka = "XS";
    }

    cout << klasa << " " << oznaka;
}

上面的代码将变量的声明放在一个更全局的作用域中,因此您可以在"if语句“内部和外部访问它们。

票数 3
EN

Stack Overflow用户

发布于 2021-05-07 16:32:45

除了声明条件条件范围之外的变量外,我还将颠倒比较的顺序,使其读起来更好,出错的可能性更小:

代码语言:javascript
运行
复制
string klasa, oznaka;

if (T < 43) {
    klasa = "B";
    oznaka = "XS";
}
else if (T < 53) {
    klasa = "A";
    oznaka = "S";
}
else if (T < 63) {
    klasa = "A";
    oznaka = "M";
}
else if (T < 73) {
    klasa = "A";
    oznaka = "L";
}
else {
    klasa = "A";
    oznaka = "XL";
}
票数 1
EN

Stack Overflow用户

发布于 2021-05-07 16:39:12

变量是在作用域中声明的。{打开一个作用域,}关闭一个作用域。在作用域中,您可以从外部作用域访问变量,但不能从内部作用域访问变量。

你可以把它想象成一栋楼的几层。在每一层,你只能往下看,不能往上看。

代码语言:javascript
运行
复制
int main() { // "ground-level"
    int x = 0;

    { // "1st floor"
        x = 1;     // we can "look down" 

        { // "2nd floor" 
            int y = 0;
            x = 2;
        }
     
        y = 1;     // error ! we cannot "look up"

        { // another "2nd floor", but not connected to above
             x = 3;
             y = 2; // error ! (there are no "windows to look horizontally")
        }
    }

}

对于您的情况,这意味着如果您希望在if外部访问变量,则需要在if外部声明这些变量

代码语言:javascript
运行
复制
#include <iostream>
#include <string>

int main(){

    std::string klasa;
    std::string oznaka;
    if(...){
        klasa = "A";
        oznaka = "XL";
    }
    std::cout << klasa << " " << oznaka;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67431365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档