我使用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 ];
我收到错误:表达式必须具有恒定值?
我的错在哪里?
答案 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还不支持此功能,并且由于您的代码需要用户输入,因此无论如何都无法使用它。