提问人:Sweep 提问时间:6/16/2023 最后编辑:JaMiTSweep 更新时间:6/16/2023 访问量:648
C++“未在此范围内声明”
C++ "was not declared in this scope"
问:
嘿嘿,基本上我写这个简单的函数来问你有多少辆车,在数组中输入数量,并将汽车的名称也分配给数组。还制作了一个 for 循环来显示它,它说它没有在范围内声明,我只是不明白为什么它这么说。有人可以帮我吗?
error: project2.cpp:13:16: error: 'cars' was not declared in this scope
13 | cin >> cars[i];
| ^~~~
project2.cpp:17:17: error: 'cars' was not declared in this scope
17 | cout << cars[i];
#include <iostream>
#include <string>
void display(){
int amount;
cout << "Car amount: ";
cin >> amount;
string cars[amount];
for(int i=0; i<amount; i++){
cout << "Enter " << i << " car name:";
cin >> cars[i];
'\n';
}
for(int i=0; i<amount; i++){
cout << cars[i];
}
}
using namespace std;
int main()
{
display();
return 0;
}
答:
1赞
Vlad from Moscow
6/16/2023
#1
问题是 using 指令放在 main 之前
using namespace std;
int main()
{
display();
return 0;
}
其中两个名称都不使用命名空间中的名称。另一方面,您使用的是在放置在 using 指令之前的函数中的标准命名空间中的名称。std
std
display
void display(){
int amount;
cout << "Car amount: ";
cin >> amount;
string cars[amount];
for(int i=0; i<amount; i++){
cout << "Enter " << i << " car name:";
cin >> cars[i];
'\n';
}
for(int i=0; i<amount; i++){
cout << cars[i];
}
}
所以名称例如,找不到。至少应该将 using 指令放在函数定义之前。cout
cin
string
注意可变长度数组作为函数中使用的数组
string cars[amount];
不是标准的 C++ 功能。
请改用容器,例如std::vector<std::string>
std::vector<std::string> cars( amount );
要使用容器,您需要包含 header 。<vector>
还有这个表达式语句
'\n';
没有效果。删除它。
相反,你可以写例如
for(int i=0; i<amount; i++){
cout << "Enter " << i << " car name:";
cin >> cars[i];
}
cout << '\n';
for(int i=0; i<amount; i++){
cout << cars[i] << '\n';
}
通常,在全局命名空间中使用 using 指令是一个坏主意。最好使用限定名称,例如
std::cout << "Car amount: ";
等等。
评论
0赞
Sweep
6/16/2023
我添加了矢量容器,但它仍然显示 project2.cpp:11:21:错误:“汽车”未在此范围内声明 11 |vector <string> cars(amount);
0赞
Sweep
6/16/2023
#include < iostream> #include <cmath> #include <string> #include <stdlib.h> #include <time.h> #include <vector> void display(){ int amount; cout << “汽车金额: ”;CIN >>量;vector <string> cars(amount);for(int i=0; i<amount; i++){ cout << “Enter ” << i << “ car name:”;Cin >>车[i];} for(int i=0; i<amount; i++){ cout << cars[i]; } }使用命名空间 std;int main() { display(); 返回 0; }
0赞
Vlad from Moscow
6/16/2023
@Sweep 您包含的大多数标头都是冗余的。您需要包含标头 #include < iostream> #include <string> include <vector>。您需要使用限定名称,例如 std::vector<std::string>> cars;并删除 using 指令。
1赞
Ben Voigt
6/16/2023
请注意,在 和 everywhere 之间,一个很好的折衷方案是放在重复使用它们的函数的顶部。using namespace std;
std::cin
using std::cin; using std::cout;
0赞
Sweep
6/16/2023
是的,我知道我只是没有删除之前和关于 std::court 和其他所有内容的内容,我认为我不需要使用它,因为我基本上是一个初学者,所以我并没有真正制作巨大的股票。使用命名空间 std 对我来说更快、更简单,而且以我的技能水平,它现在效果很好。
1赞
Sc0lapasta
6/16/2023
#2
//new code:
#include <iostream>
#include <string>
#define amount 5 //<---- defines the number of cars in the array
using namespace std;
void display()
{
//int amount;
//cout << "Car amount: ";
//cin >> amount;
string cars[amount]; //now, you have a defined number of cars, c++ doesnt allow to use a variables as lenght of array
for (int i = 0; i < amount; i++)
{
cout << "Enter " << i + 1 << " car name:" << endl; //added endl instead of \n
// ^more undestandable as it starts from 1 instead of 0
cin >> cars[i];
//'\n'; doesnt work like this, it need to be used in a string as single character, like "\ncars"
}
for (int i = 0; i < amount; i++)
{
cout << cars[i] << " "; //more understandable
}
}
int main()
{
display();
return 0;
}
评论
0赞
Sc0lapasta
6/16/2023
很抱歉,如果我没有按照你的意图做出回应,我用我的了解试图给你最好的回应。我也是 Stack Overflow 的新手,这实际上是我第一次尝试帮助某人编码:)如果我发送给您的代码不起作用(它适用于我的 W11 机器),请告诉我以便我更正它,如果这是您需要的,我也可以告诉自己如何在输入中接收数组的长度。对不起,我的英语不好,我希望我能帮到你。
0赞
Sweep
6/16/2023
这很好,老实说,这是我得到的最好的回应,非常感谢!
3赞
underloaded_operator
6/16/2023
#define amount 5
-> 应为 ,避免使用不必要的宏const int AMOUNT = 5
评论
std::vector<std::string>
string cars[amount];
std::cout
cout
std::string
string
'\n';
在一条线上,它本身绝对不做任何事情。