Инициализируйте векторы, чтобы они содержали 13 элементов

я пытаюсь инициализировать векторы, чтобы они содержали 13 элементов каждый в конструкторе класса.

Так как в следующем случае компилятор выдает "синтаксическую ошибку: 'константа'".

#include <vector>
using namespace System;  
public ref class MyClass {
public :
      vector<int> vector1D(13) ;     //  Syntax error : 'constant'
      vector<vector<int>> vector2D(13,vector<int>(13)) ;

};

Тогда как можно инициализировать вектор, чтобы он содержал 13 элементов в конструкторе?


person eliz    schedule 07.02.2012    source источник


Ответы (4)


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

class MyClass {
public :
      vector<int> vector1D;
      vector<vector<int>> vector2D;

      MyClass() : 
          vector1D(13),
          vector2D(13,vector<int>(13))
      {}
};
person Mike Seymour    schedule 07.02.2012
comment
в этом случае это может быть неподходящий синтаксис. Компилятор выдает новую ошибку: MyClass: смешанные типы не поддерживаются - person eliz; 07.02.2012
comment
@eliz: я предполагаю, что это как-то связано с Managed C++, и я ничего об этом не знаю. Вот как вы бы инициализировали их в стандартном C++; согласно ответу Dialecticus, вам может понадобиться использовать какой-то странный нестандартный тип массива вместо vector. - person Mike Seymour; 07.02.2012
comment
в любом случае я изменю класс, чтобы не использовать массив - person eliz; 07.02.2012

Вам нужно сделать это в конструкторе:

class MyClass {
public :
    vector<int> vector1D;
    vector< vector<int> > vector2D;

    MyClass()
    {
        vector1D = vector<int>(13);
        vector2D = vector< vector<int> > (13, vector<int>(13));
    }
};
person Donotalo    schedule 07.02.2012

Вы не можете зарезервировать место для 13 элементов в конструкторе. Для этого используйте vector::reserve.

person Mr Lister    schedule 07.02.2012
comment
Однако вы можете инициализировать его, чтобы он содержал 13 элементов в конструкторе. - person Mike Seymour; 07.02.2012
comment
Спасибо за разъяснения. Да, если вы знаете во время строительства, что такое 13 элементов. Я не вижу этого в коде OP. - person Mr Lister; 07.02.2012
comment
Код OP пытается инициализировать его 13 значениями, инициализированными значениями, используя конструктор, который делает именно это. Единственная проблема заключается в том, что это нужно сделать в определении конструктора, а не в объявлении члена. - person Mike Seymour; 07.02.2012

Если MyClass является управляемым классом, то он не может иметь неуправляемых членов.

#using <mscorlib.dll>
#include <vector>

using namespace System;

public ref class MyClass {
public :
    cli::array<int>^ vector1D;
    cli::array<cli::array<int>^>^ vector2D;
    MyClass()
    {
        Array::Resize(vector1D, 13);
        Array::Resize(vector2D, 13);

        for each (cli::array<int>^ item in vector2D)
            Array::Resize(item, 13);
    }
};
person Dialecticus    schedule 07.02.2012
comment
Массив в порядке, но здесь должен быть вектор - person eliz; 07.02.2012
comment
Тогда MyClass не может быть ref. - person Dialecticus; 07.02.2012