none
Не получается создать массив используя объект RRS feed

  • Вопрос

  • Язык программирования: C++

    Имеется объект ob1, в котором есть константная переменная sz, которая инициализируется при помощи конструктора. В main, не получается создать массив, размерность которого задаёт ob1.sz 

    Сообщение об ошибке: 

    Ошибка 1 error C2057: требуется константное выражение c:\users\tipo\documents\exploring\cpp\cpp_8_21\cpp_8_21\main.cpp 17 1 cpp_8_21

    В  чём ошибка? Заранее спасибо! 

    Код программы:

    #include <iostream>
    
    using namespace std;
    
    class Test {
    public:
    	const int sz;
    	Test(int siz = 500);
    };
    
    int main(void)
    {
    	Test ob1;
    	Test ob2(1000);
    
    	cout << ob1.sz << endl;
    	int mass[ob1.sz];
    }
    
    Test::Test(int siz) : sz(siz)
    {
    }



     

    13 апреля 2014 г. 14:08

Ответы

  • Размерность статического массива должна быть представлена в виде константы или константного выражения, чтобы его мог вычислить компилятор. Поле класса тут не подходит, пусть оно и константное, но компилятор его значения в момент создания объекта не знает.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа iTiPo 14 апреля 2014 г. 10:52
    13 апреля 2014 г. 18:34

Все ответы

  • Размерность статического массива должна быть представлена в виде константы или константного выражения, чтобы его мог вычислить компилятор. Поле класса тут не подходит, пусть оно и константное, но компилятор его значения в момент создания объекта не знает.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа iTiPo 14 апреля 2014 г. 10:52
    13 апреля 2014 г. 18:34
  • Можно создать массив динамически

    int *mass = new int[ob1.sz];
    
    for (int i = 0; i < ob1.sz; i++)
    {
    	mass[i] = i;
    }
    
    Не забудьте освободить выделенную память, после того как массив стал не нужен.
    delete[] mass;
    mass = NULL;

    • Предложено в качестве ответа Sing1e 13 апреля 2014 г. 18:51
    13 апреля 2014 г. 18:51