Dies ist eine nicht zusammenhängende Frage über den Code in this question, in Bezug auf die folgende Template-Funktion.Fehler: ungültige Initialisierung der Referenz vom Typ 'int &' vom Ausdruck des Typs 'const int'
template <class T>
class Object : public Container {
public:
T& object;
Object(const T& obj) : object(obj) {}
};
Dies ist der Code, der den Konstruktor ruft:
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
Dieser Code kompiliert gut, aber sobald ich eine Linie in main
hinzufügen, dass es nennt:
Array array;
int i = 3;
array.add_element(i);
I Erhalte eine Compiler-Warnung: error: invalid initialization of reference of type 'int&' from expression of type 'const int'
.
Worum geht es? Ich habe eine int
in. Sollte es nicht automatisch in eine const int&
für mich verwandelt werden? Warum beschwert sich der Compiler?
Hinweis ändern: 'T & Objekt;' - auch 'const T & obj = nullptr' keinen Sinn machen , Sie können einen Verweis auf ein 'nullptr' nicht initialisieren. – Xeo
Wie ist das ein Hinweis? Genau so ist 'object' bereits deklariert. Und danke, das werde ich ändern. – anthropomorphic
Es ist ein Hinweis, weil Sie eine nicht-const-Referenz von einer const-Referenz nicht initialisieren können - const-correct 101. – ildjarn