[英]Array not declared in this scope when call Function
我尝试运行C ++程序时遇到一些问题。 它的作用是询问用户数组的大小以及数组的类型是double还是int,然后根据用户的选择,声明该数组,然后调用一个用用户值填充该数组的函数
#include <iostream>
using namespace std;
template<class T>
void fill(T *arr,int size){
for(int i = 0; i < size; i ++){
cout<<"Insert value " << i << " :" ;
cin >> arr[i];
}
}
int main(){
int option,size;
cout << "Size? ";
cin >> size;
cout << "1 = double" << endl
<< "2 = int" << endl;
cin >> option;
if(option == 1){
double arr[size];
}
else if(option == 2){
int arr[size];
}
fill(arr,size);
return 0;
}
但是当我尝试运行它时,出现了此错误
test.cpp:在函数'int main()'中:test.cpp:24:7:错误:未在此范围内声明'arr'。fill(arr,size); ^
在main()
,您的arr
变量仅在声明它们的if()
块的范围内。 当达到if
的close }
时,它们将超出范围。 因此,它们的确不在调用fill()
范围内。
无论如何,这并不重要,因为无论如何您都不能声明具有多个类型的变量。 因此,您将无法在fill()
的范围内声明单个arr
数组变量,并且无法根据用户输入将数组类型设置为int
或double
(当然,除非您使用std::variant
或std::any
,但这是一个主题)。
您将需要在if()
块内调用fill()
,这些数组在作用域内。
另外,您还依赖于非标准的特定于供应商的扩展,称为“可变长度数组”,也就是在自动(堆栈)内存而不是动态(堆)内存中分配可变大小的数组。 仅某些编译器将该扩展实现为一项附加功能。 不要依赖它 分配可变大小数组的正确方法是改用new[]
或更好的std::vector
。
尝试更多类似这样的方法:
#include <iostream>
#include <vector>
template<class T>
void fill(T *arr, int size){
for(int i = 0; i < size; i ++){
std::cout << "Insert value " << i << " :";
std::cin >> arr[i];
}
}
int main(){
int option, size;
std::cout << "Size? ";
std::cin >> size;
std::cout << "1 = double" << std::endl
<< "2 = int" << std::endl;
std::cin >> option;
if (option == 1) {
std::vector<double> arr(size);
fill(&arr[0], size);
}
else if (option == 2) {
std::vector<int> arr(size);
fill(&arr[0], size);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.