Estoy diseñando una clase que tiene un std::vector<int>
como variable de instancia. Estoy usando un std::vector
porque necesito establecer su tamaño en tiempo de ejecución. Estas son las partes pertinentes de mi código:Setup std :: vector in class constructor
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);
}
Cuando intento compilar recibo estos mensajes de error:
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
Sin embargo, cuando cambio la línea en cuestión a:
vector<int> temp(size,0);
vec = temp;
Ahora compila sin problemas y obtengo el comportamiento deseado y puedo acceder a mi vector como
vec[i] // i having been defined as an int yada yada yada
Esta solución está bien, pero me gustaría entender por qué funciona y falla el primer método. Gracias por adelantado.
'nueva vECTOR' devuelve un puntero no es un valor, para que usted sea capaz de asignarle a la variable miembro de' vec' – Chethan
Mi conjetura es que provienen de Java o C# y si es así, mi consejo es grave para obtener primero un buen libro introductorio de C++. –
Y, por favor, siempre publique el código actual mediante el método de copiar y pegar. El código que publicó está incompleto –