繁体   English   中英

调用Function时未在此范围内声明数组

[英]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数组变量,并且无法根据用户输入将数组类型设置为intdouble (当然,除非您使用std::variantstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM