none
Использование внутриклассовых констант. (С++) RRS feed

  • Вопрос

  • Здравствуйте. Написал примерно следующее:

    #include"stdafx.h"
    #include"iostream"
    using namespace std;
    class base{
     const int size;
     int mas[size];
    public:
     base(int i) :size(i){}
    };
    int main(){
     base ob(10);
     system("pause");
     return 0;
    }

    Да вот только не желает компилятор создавать массив размера size. Не понимаю в чём проблема, константа ведь инициализируется в момент создания объекта.

    25 марта 2015 г. 20:28

Ответы

  • константа должна быть инициализирована при объявлении, на то она и константа

    Добавлено:

    А, я понял. Вы пытаетесь обойти запрет массивов переменной длины в С++ путем использования константы в конкретном экземпляре класса. Ничего не выйдет, Visual C++ не поддерживает массивы переменной длины даже в С (где по стандарту они должны быть). Используйте vector или list.

    26 марта 2015 г. 3:02
  • Дело не в том что когда инициализируется. Говорю, Visual C++ в принципе не принимает массивы с размером, неизвестным на момент компиляции. GCC, на сколько я знаю, принимает (скачайте какую нибудь IDE типа CodeBlocks, ваш код возможно скомпилируется).
    26 марта 2015 г. 10:21

Все ответы

  • константа должна быть инициализирована при объявлении, на то она и константа

    Добавлено:

    А, я понял. Вы пытаетесь обойти запрет массивов переменной длины в С++ путем использования константы в конкретном экземпляре класса. Ничего не выйдет, Visual C++ не поддерживает массивы переменной длины даже в С (где по стандарту они должны быть). Используйте vector или list.

    26 марта 2015 г. 3:02
  • Потому что на момент инициализации массива mas в шаблоне значение size не определено.
    26 марта 2015 г. 6:08
  • Но инициализация массива ведь происходит при создании объекта, а конструктор к этому времени уже задаст значение size.
    26 марта 2015 г. 10:07
  • Дело не в том что когда инициализируется. Говорю, Visual C++ в принципе не принимает массивы с размером, неизвестным на момент компиляции. GCC, на сколько я знаю, принимает (скачайте какую нибудь IDE типа CodeBlocks, ваш код возможно скомпилируется).
    26 марта 2015 г. 10:21