【问题标题】:Constans variable assigned by function and used to create array C++由函数分配并用于创建数组 C++ 的常量变量
【发布时间】:2013-06-08 21:16:59
【问题描述】:

我使用 Visual Studio 2012

我的目标:

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

这是我的代码 sn-ps:

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

我收到错误:表达式必须具有常量值?

我的错在哪里?

【问题讨论】:

  • 对于数组的维度,您需要一个编译时间常数(或 C++11 constexpr)。在这种情况下,您的 const int 只是在无法修改的意义上是恒定的。它不是编译时间常数。看看std::vector 或 C++14 std::dynarray
  • @juanchopanza,或 C++14 VLA。

标签: c++ arrays function constants


【解决方案1】:

如果你像下面这样初始化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 尚不支持此功能,并且由于您的代码需要用户输入,因此您无论如何都无法使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2019-02-23
    相关资源
    最近更新 更多