Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Constans变量,由函数赋值,用于创建数组C++;_C++_Arrays_Function_Constants - Fatal编程技术网

C++ Constans变量,由函数赋值,用于创建数组C++;

C++ Constans变量,由函数赋值,用于创建数组C++;,c++,arrays,function,constants,C++,Arrays,Function,Constants,我使用Visual Studio 2012 我的目标: 用户给定数组大小->函数将数据返回常量变量->并创建数组。 有可能吗 以下是我的代码片段: const int user_get_array_size() { int a; bool blokada; do { cout << "Podaj wielkość tablicy: "; cin >> a; //Jeśli cin nie mógł zapisać danych do inta.

我使用Visual Studio 2012

我的目标:

用户给定数组大小->函数将数据返回常量变量->并创建数组。 有可能吗

以下是我的代码片段:

const int user_get_array_size()
{
int a;
bool blokada;

do
{
    cout << "Podaj wielkość tablicy: ";
    cin >> a;

    //Jeśli cin nie mógł zapisać danych do inta.
    //Lub wielkość tablicy mniejsza od 1? (Po co nam analizować coś co ma )
    if(cin.fail() || a < 2)
    {
        blokada = true;


        //Czyszczenie Cina z syfów.
        //Cin wchodzi char by char
        //while(cin)
        //{
            cin.clear(); //Czyszczenie CINA
        //}

        cin.ignore();

        system("CLS");
        cout << "Wielkość tablicy musi być liczą wiekszą od 1 \n(Wkońcu ten program ma coś analizować.) \n";
    }
    else
    {
        blokada = false;
    }
}
while(blokada);



return a;
}


const int w_array = user_get_array_size();

int tablica[ w_array ];
const int user\u get\u array\u size()
{
INTA;
布尔·布洛卡达;
做
{
cout>a;
//杰利·辛尼·莫戈·扎皮萨·达尼奇·多伊塔。
//Lub wielkośćTablice mniejsza od 1?(Po co nam analizowaćcośco ma)
if(cin.fail()| a<2)
{
布洛卡达=真;
//茨茨泽尼·齐纳兹·西夫沃。
//一个字符接一个字符
//while(cin)
//{
cin.clear();//Czyszczenie CINA
//}
cin.ignore();
系统(“CLS”);

cout如果按如下方式初始化
const int w_array

const int w_array = 100;
这样就没有问题了,因为编译时已知
100
。但是,使用函数返回的值初始化
w_数组
,该函数只在运行时已知。因此,不能在数组声明中使用
w_数组
,因为需要在编译时知道该值

修复代码的最简单方法是使用
std::vector

std::vector<int> tablica(w_array);
std::向量tablica(w_数组);
<> >注意,C++中的代码> const 是很难的。当你用一个文字初始化它时,它可以被用在需要常量表达式的上下文中。当你用一个只在运行时知道的值初始化它时,它是只读变量,但它不能用在需要常量表达式的上下文中。


另外,C++11中的
constepr
函数也解决了一些问题。但是,visual studio还不支持这一点,而且由于您的代码需要用户输入,因此您将无法使用它。

您需要一个编译时常量(或C++11
constepr
)对于数组的维数。在本例中,
const int
仅在无法修改的意义上是常量。它不是编译时常量。请查看
std::vector
或C++14
std::dynarray
@juanchopanza或C++14 VLAs。