en cuenta lo siguiente:std :: vector de objetos y const-corrección
class A {
public:
const int c; // must not be modified!
A(int _c)
: c(_c)
{
// Nothing here
}
A(const A& copy)
: c(copy.c)
{
// Nothing here
}
};
int main(int argc, char *argv[])
{
A foo(1337);
vector<A> vec;
vec.push_back(foo); // <-- compile error!
return 0;
}
Obviamente, el constructor de copia no es suficiente. ¿Qué me estoy perdiendo?
EDITAR: Ofc. No puedo cambiar esto-> c en el método operator =(), así que no veo cómo se usará operator =() (aunque es requerido por std :: vector).
* ¿Qué * es el error de compilación? * No seas vago, sé un [as] (http://tinyurl.com/so-hints); escriba un [apropiado] (http://sscce.org/) [test-case!] (http://www.xs4all.nl/~weegen/eelis/iso-c++/testcase.xhtml) * –
Creo que tiene una opción: o pierde la const, o pierde la capacidad de usar el vector. Si comienzas a trabajar alrededor de él y permites que 'operator =' modifique el miembro const, ahora has dado los medios para que cualquier parte del código haga lo mismo. – UncleBens
const int c; // no debe ser modificado! Su comentario anterior, ¿significa eso que 'c' no debería ser modificado por algo que use objetos de la clase A o por los miembros de la clase A en sí? – yasouser