Tôi đã bắt đầu thử tiêu chuẩn C ++ 11 và tôi tìm thấy này câu hỏi trong đó mô tả làm thế nào để gọi ctor của bạn từ một ctor trong cùng một lớp để tránh việc một phương pháp init hoặc tương tự. Bây giờ tôi đang thử điều tương tự với mã giống như sau:
hpp:
class Tokenizer
{
public:
Tokenizer();
Tokenizer(std::stringstream *lines);
virtual ~Tokenizer() {};
private:
std::stringstream *lines;
};
cpp:
Tokenizer::Tokenizer()
: expected('=')
{
}
Tokenizer::Tokenizer(std::stringstream *lines)
: Tokenizer(),
lines(lines)
{
}
Nhưng điều này đang gây ra lỗi cho tôi:
In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’:
/path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation
Tôi đã thử di chuyển phần Tokenizer () trước và cuối cùng trong danh sách nhưng điều đó không giúp được gì.
Lý do đằng sau điều này là gì và tôi nên sửa nó như thế nào? Thay vào đó, tôi đã thử di chuyển lines(lines)
đến cơ thể this->lines = lines;
và nó hoạt động tốt. Nhưng tôi thực sự muốn có thể sử dụng danh sách trình khởi tạo.