Установите вектор std ::в конструкторе класса

. Я разрабатываю класс, который имеет std::vector<int>в качестве переменной экземпляра. Я использую std::vector, потому что мне нужно установить его размер во время выполнения. Вот соответствующие части моего кода:

my_class.h:

#include <vector>
using std::vector;
class MyClass {
    int size;
    vector<int> vec;
}

my_class.cc:

#include "my_class.h"
using std::vector
MyClass::MyClass(int m_size) : size(m_size) {
     vec = new vector<int>(size,0);
}

Когда я пытаюсь скомпилировать, я получаю эти сообщения об ошибках:

g++ -c -Wall my_class.cc -o my_class.o

my_class.cc: In constructor ‘MyClass::MyClass(int):

  my_class.cc:4 error: no match for ‘operator=’ in ‘((MyClass*)this)->My_Class::vec = ((*(const allocator_type*)(& std::allocator<int>())), (operator new(24u), (<statement>, ((std::vector<int>*)<anonymous>))))’

make: *** [my_class.o] Error 1

Однако, когда я меняю оскорбительную строку на:

vector<int> temp(size,0);
vec = temp;

Теперь он компилируется без проблем, и я получаю желаемое поведение и могу получить доступ к своему вектору как

vec[i]  // i having been defined as an int yada yada yada

Этот обходной путь в порядке, но я хотел бы понять, почему он работает, а первый метод не работает. Заранее спасибо.

24
задан hackjutsu 14 June 2017 в 23:52
поделиться