我有一个简单的C++程序,当我试图编译它时,我得到了两个错误:'klasa' was not declared in this scope
'oznaka' was not declared in this scope
有人知道我怎么才能修复它吗?
注意:我仍然是C++的初学者。:]
#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;
}
发布于 2021-05-07 16:30:18
错误的原因是您在"if语句“中声明了klasa
和oznaka
中的每一个,因此您只能在它们的作用域内(即在它们各自的"if语句”中)访问这些变量。
#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语句“内部和外部访问它们。
发布于 2021-05-07 16:32:45
除了声明条件条件范围之外的变量外,我还将颠倒比较的顺序,使其读起来更好,出错的可能性更小:
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";
}
发布于 2021-05-07 16:39:12
变量是在作用域中声明的。{
打开一个作用域,}
关闭一个作用域。在作用域中,您可以从外部作用域访问变量,但不能从内部作用域访问变量。
你可以把它想象成一栋楼的几层。在每一层,你只能往下看,不能往上看。
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
外部声明这些变量
#include <iostream>
#include <string>
int main(){
std::string klasa;
std::string oznaka;
if(...){
klasa = "A";
oznaka = "XL";
}
std::cout << klasa << " " << oznaka;
}
https://stackoverflow.com/questions/67431365
复制相似问题