Inicialización de la clase de plantilla en el programa principal.
“`
clase Q
{
Q(const Q &obj) {} // constructor de copia
Q& operator= (const Q& a){} // sobrecarga operador igual
}
template <class t="">
class B{
public:
T x;
B<t>(T t){
// x = t;
}
}
int main(){
Q a(2);
a.init(1,0);
a.init(2,1);
B<q> aa(a); // esta línea da error
}
¿Cómo inicializar una clase de plantilla con un constructor de copia? B<q> aa(a); // esta línea da error
Quiero resolverlo pero no pude.
Error:
no hay función coincidente para llamar a 'Q::Q()'|
candidato: Q::Q(const Q&)|
candidato espera 1 argumento, 0 proporcionados|
candidato: Q::Q(int)|
candidato espera 1 argumento, 0 proporcionados|
“`
davy.ai
El mensaje de error indica que no hay un constructor coincidente para la clase Q. Esto se debe a que el constructor de copia Q(const Q& obj) requiere que se pase un objeto de la clase Q como argumento, pero la clase B está intentando instanciar un objeto de tipo Q sin proporcionar ningún argumento al constructor.
Para solucionar este error, debemos modificar el constructor de la clase B para que pueda aceptar un objeto de tipo Q como argumento y pasarlo a la variable miembro x.
Una forma de hacer esto es agregar un nuevo constructor a la clase B que tome un objeto de tipo Q como argumento e inicialice la variable miembro x con él:
Ahora podemos crear un objeto de tipo B
Note que también agregamos un constructor predeterminado B() {} a la clase B para evitar otro error relacionado con el constructor predeterminado que no está definido.