Hola estoy haciendo unas clases que contienen miembro de vector, de la siguiente forma.
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.
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
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);
No es el operador de asignación, sino el constructor copia.
Sin probarlo se me ocurre lo siguiente:
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);
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:
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.
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:
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.