Như tự tập thể dục, tôi đã viết mã này rất đơn giản:Phải là kiểu tham chiếu được khởi tạo trong danh sách khởi tạo hàm dựng không?
#include <iostream>
int gIndex = 3;
template <class T> class Array
{
public:
explicit Array(int size);
T& operator[](int i) { return m_data[i]; }
T operator[](int i) const { return m_data[i]; }
T getAnchorPoint() const { return m_data[m_anchor]; }
private:
T* m_data;
int m_size;
int& m_anchor;
};
template <class T> Array<T>::Array(int size) : m_size(size), m_data(new T[size])
{
memset(m_data, 0, size*sizeof(T));
m_anchor = gIndex;
}
int main()
{
Array<double> a(10);
return 0;
}
tôi nhận được một lỗi biên dịch, mà nói:
error C2758: 'Array<T>::m_anchor' : must be initialized in constructor base/member initializer list
Nó chưa bao giờ xảy ra, những gì mang lại cho tôi để hỏi này câu hỏi:
Phải bất kỳ loại tham chiếu lớp học nào được khởi tạo trong danh sách khởi tạo hàm tạo không?
Nếu có, tại sao? Đó có phải là liên quan đến một cách nào đó để thực tế là một loại tài liệu tham khảo không bao giờ có thể được phân công lại?
Có nhiều loại phải được khởi tạo trong danh sách khởi tạo hàm dựng không?
Tôi thực sự xấu hổ khi hỏi điều đó, nhưng loại tham chiếu không có toán tử gán? – Billie
@ user1798362 không, một tham chiếu nó chỉ là một bí danh cho một cái gì đó khác. Khi bạn "gán" cho một tham chiếu, bạn thực sự gán cho đối tượng mà nó đề cập đến. – juanchopanza
Như tôi đã nghĩ. cảm ơn! – Billie