Esta es una pregunta no relacionada sobre el código en this question, con respecto a la siguiente función de plantilla.error: inicialización no válida de la referencia de tipo 'int &' de la expresión de tipo 'const int'
template <class T>
class Object : public Container {
public:
T& object;
Object(const T& obj) : object(obj) {}
};
Este es el código que llama al constructor:
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
Este código compila bien, pero tan pronto como se agrego una línea en main
que lo llama:
Array array;
int i = 3;
array.add_element(i);
I obtener una advertencia del compilador: error: invalid initialization of reference of type 'int&' from expression of type 'const int'
.
¿De qué se trata? Pasé un int
in. ¿No debería convertirse automáticamente en un const int&
para mí? ¿Por qué se queja el compilador?
Consejo: 'T & objeto;' - También, 'const T & obj = nullptr' no tiene ningún sentido , no puede inicializar una referencia a 'nullptr'. – Xeo
¿Cómo es eso una pista? Así es exactamente como 'object' ya está declarado. Y gracias, cambiaré eso. – anthropomorphic
Es una pista porque no se puede inicializar una referencia no const desde una referencia const - const-correctness 101. – ildjarn