Le programme d'installation std::vector dans le constructeur de la classe

Je suis de la conception d'une classe qui a un std::vector<int> comme une variable d'instance. Je suis à l'aide d'un std::vector parce que j'ai besoin de définir sa taille au moment de l'exécution. Voici les parties pertinentes de mon code:

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);
}

Lorsque je tente de compiler je reçois ces messages d'erreur:

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

Cependant, lorsque je change la ligne incriminée:

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

Maintenant compile sans problème et je reçois le comportement désiré et peut accéder à mon vecteur de

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

Cette solution de contournement est d'accord, mais j'aimerais comprendre pourquoi il fonctionne et la première méthode échoue. Merci à l'avance.

new vector retourne un pointeur n'est pas une valeur, pour vous d'être en mesure d'affecter à votre variable membre vec
Ma conjecture est que vous venez de Java ou en C# et si donc, mes conseils sérieux est d'obtenir une bonne introduction à C++ livre premier.
Et merci de toujours poster le code réel via le copier+coller. Le code que vous avez posté est incomplète
Côté: avez-vous vraiment besoin de la size membre? Rappelons que les vecteurs de porter autour de leur taille, qui peut toujours être interrogé comme suit: vec.size().

OriginalL'auteur fenkerbb | 2012-07-10