Añadir objetos vacios a vector para luego modificarlo.

Iniciado por anonimo12121, 17 Junio 2013, 11:48 AM

0 Miembros y 2 Visitantes están viendo este tema.

anonimo12121

Hola estoy haciendo unas clases que contienen miembro de vector, de la siguiente forma.
Código (cpp) [Seleccionar]
vector<clase1> listaclase1;
listaclase1.push_back(clase1());
listaclase1[0].add(x);

Hasta aquí va todo bien el problema es cuando la clase1 herede de una clase que tiene sobrecargado el operador "=" para que no sea copiable.

Código (cpp) [Seleccionar]
class SFML_SYSTEM_API NonCopyable
{
protected :
   NonCopyable() {}
private :
   NonCopyable(const NonCopyable&);
   NonCopyable& operator =(const NonCopyable&);
};


entonces no puedo hacer lo que intentaba hacer arriba, haber si alguien me puede ayudar y encontrar una solucion sea con puntero o como sea.

He pensado que quizás estoy haciendo un mal hábito en el vector


TROZO DE MI CÓDIGO
Código (cpp) [Seleccionar]
sf::Texture t1;
   t1.loadFromFile("image/p1.png");

   Widgets.push_back(Widget());
   Widgets.push_back(Widget());
   Widgets[0].setTexture(t1);
   Widgets[1].setTexture(t1);
   Widgets[1].setPosition(100,20);
   Layouts.push_back(Layout());// Aquí ya falla
   Layouts[0]->addWidget(&Widget1);
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

amchacon

No es el operador de asignación, sino el constructor copia.

Sin probarlo se me ocurre lo siguiente:

Código (cpp) [Seleccionar]

sf::Texture t1;
Layouts Nuevo;
t1.loadFromFile("image/p1.png");
     
Widgets.push_back(Widget());
Widgets.push_back(Widget());
Widgets[0].setTexture(t1);
Widgets[1].setTexture(t1);
Widgets[1].setPosition(100,20);
Layouts.push_back(Nuevo);
Layouts[0]->addWidget(&Widget1);
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

anonimo12121

Cita de: amchacon en 17 Junio 2013, 11:59 AM
No es el operador de asignación, sino el constructor copia.

Sin probarlo se me ocurre lo siguiente:

Código (cpp) [Seleccionar]

sf::Texture t1;
Layouts Nuevo;
t1.loadFromFile("image/p1.png");
   
Widgets.push_back(Widget());
Widgets.push_back(Widget());
Widgets[0].setTexture(t1);
Widgets[1].setTexture(t1);
Widgets[1].setPosition(100,20);
Layouts.push_back(Nuevo);
Layouts[0]->addWidget(&Widget1);


Lo he conseguido haciendo que el vector sea de punteros.
Código (cpp) [Seleccionar]

   typedef vector<Layout*> ListLayouts;
....

sf::Texture t1;
   t1.loadFromFile("image/p1.png");
   Layout Nuevo;
   Widgets.push_back(Widget());
   Widgets.push_back(Widget());
   Widgets[0].setTexture(t1);
   Widgets[1].setTexture(t1);
   Widgets[1].setPosition(100,20);
   Layouts.push_back(&Nuevo);
   Layouts[0]->addWidget(&Widget1);
   Layouts[0]->addWidget(&Widgets[1]);

Lo que intentaba era hacerlo de forma que no tuviera:
Código (cpp) [Seleccionar]
Layout Nuevo;

en plan Layouts.push_back(Layout());

Layout es una clase mi que hereda de otra clase de la libreria sfml

NoCopyable -> RenderTexture -> Layout.
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746