Đây là câu hỏi không liên quan về mã trong this question, liên quan đến chức năng mẫu sau.lỗi: khởi tạo không hợp lệ tham chiếu loại 'int &' từ biểu thức loại 'const int'
template <class T>
class Object : public Container {
public:
T& object;
Object(const T& obj) : object(obj) {}
};
Đây là mã mà các cuộc gọi constructor:
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
Mã này biên dịch tốt, nhưng ngay sau khi tôi thêm một dòng trong main
mà gọi đó là:
Array array;
int i = 3;
array.add_element(i);
tôi nhận được cảnh báo trình biên dịch: error: invalid initialization of reference of type 'int&' from expression of type 'const int'
.
Điều đó nghĩa là gì? Tôi đã thông qua một số int
. Không được tự động biến thành một số const int&
cho tôi? Tại sao trình biên dịch lại phàn nàn?
Gợi ý: 'T & đối tượng;' - Ngoài ra, 'const T & obj = nullptr' không thực hiện bất kỳ ý nghĩa , bạn không thể khởi tạo tham chiếu đến 'nullptr'. – Xeo
Làm thế nào là một gợi ý? Đó chính là cách 'đối tượng' đã được khai báo. Và cảm ơn bạn, tôi sẽ thay đổi điều đó. – anthropomorphic
Đó là một gợi ý vì bạn không thể khởi tạo tham chiếu không const từ tham chiếu const - const-correctness 101. – ildjarn