Constans由函数分配的变量,用于创建数组C ++

时间:2013-06-08 21:16:59

标签: c++ arrays function const

我使用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 ];

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

我的错在哪里?

1 个答案:

答案 0 :(得分: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 ++中很棘手。使用文字初始化时,可以在需要常量表达式的上下文中使用它。使用仅在运行时已知的值对其进行初始化时,它是一个只读变量,但不能在需要常量表达式的上下文中使用。

此外,使用C ++ 11中的constexpr函数解决了一些问题。但是,visual studio还不支持此功能,并且由于您的代码需要用户输入,因此无论如何都无法使用它。