Thông thường khi bạn có một biến thành viên tin liên tục trong lớp học của bạn, mà chỉ có một getter nhưng không setter, nó sẽ giống như thế này:C++ xác định một biến thành viên liên tục bên trong constructor lớp
// Example.h
class Example {
public:
Example(const int value);
const int getValue() const;
private:
const int m_value;
};
// Example.cpp
#include "Example.h"
Example::Example(const int value)
: m_value(value)
{
}
const int Example::getValue() const
{
return m_value;
}
Bây giờ những gì Tôi đang cố gắng làm, có một biến thành viên int không đổi như thế, nhưng thay vì định nghĩa nó trong phần khởi tạo như vậy: : m_value(value)
Tôi cần phải lấy một đối tượng khác - tôi sẽ sử dụng một vectơ trong ví dụ này - như tham số của hàm tạo và đặt m_value dựa trên đối tượng tham số. Trong trường hợp này, tôi sẽ cố gắng làm kích thước + 1 vector, nếu kích thước là trên 0. Vì vậy, đây là những gì tôi đã làm:
Example::Example(std::vector<Example*> myVec)
{
if (myVec.size()) {
m_value = myVec.size() + 1;
}
else {
m_value = -1;
}
}
Nhưng tôi nhận được một lỗi uninitialized member 'Example::m_value' with 'const' type 'const int'
và nếu tôi init m_value bên trong Khởi tạo phần, tôi nhận được lỗi assignment of read-only data-member 'Example::m_value'
mà tất cả làm cho tinh thần với tôi, tôi là nghĩa vụ phải có được những sai sót, nhưng làm thế nào tôi có thể đi xung quanh họ?
Chỉnh sửa: Chỉ cách tôi có thể chỉnh sửa m_value
là bên trong chính đối tượng (vì m_value là riêng tư). Chỉ có getter sẽ hạn chế tôi đặt m_value thành bất kỳ thứ gì ngoài những gì được thiết lập trong hàm tạo. Tôi có được lợi ích gì khi có int liên tục như một biến thành viên?
': m_value (! MyVec.empty()? MyVec.size() + 1: -1)'? – hmjd
tại sao nó phải là 'const'? – Nim
Đối với cập nhật của bạn - không, không có lợi ích mà tôi có thể nhìn thấy ... – Nim