0

我使用 Visual Studio 2012

我的目标:

用户给出数组大小 -> 函数将数据返回到 const 变量 -> 并创建数组。有可能的?

这是我的代码片段:

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 ];

我收到错误:表达式必须具有恒定值?

我的错在哪里?

4

1 回答 1

2

如果你const int w_array像下面这样初始化:

const int w_array = 100;

这样就不会出现100编译时已知的问题。w_array但是,您使用仅在运行时才知道的函数返回进行初始化。因此,您不能w_array在数组声明中使用,因为需要在编译时知道该值。

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

std::vector<int> tablica(w_array);

请注意,这const在 C++ 中很棘手。当你用文字初始化它时,它可以在需要常量表达式的上下文中使用。当您使用仅在运行时才知道的值对其进行初始化时,它是一个只读变量,但不能在需要常量表达式的上下文中使用。

此外,一些问题已通过constexprC++11 中的函数得到解决。但是,Visual Studio 尚不支持此功能,并且由于您的代码需要用户输入,因此您无论如何都无法使用它。

于 2013-06-08T21:28:39.840 回答