Инициализируйте векторы, чтобы они содержали 13 элементов - PullRequest
0 голосов
/ 07 февраля 2012

Я пытаюсь инициализировать векторы, чтобы в конструкторе класса содержалось по 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 элементов?

Ответы [ 4 ]

1 голос
/ 07 февраля 2012

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

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

      MyClass() : 
          vector1D(13),
          vector2D(13,vector<int>(13))
      {}
};
0 голосов
/ 07 февраля 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);
    }
};
0 голосов
/ 07 февраля 2012

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

0 голосов
/ 07 февраля 2012

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

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

    MyClass()
    {
        vector1D = vector<int>(13);
        vector2D = vector< vector<int> > (13, vector<int>(13));
    }
};
...