Я начал пробовать стандарт C ++ 11 и нашел этот вопрос, который описывает, как вызвать ваш ctor из другого ctor в том же классе, чтобы избежать использования метода инициализации и т.п. Теперь я пробую то же самое с кодом, который выглядит следующим образом:
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)
{
}
Но это вызывает ошибку:
In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’:
/path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation
я пытался переместить часть Tokenizer () первой и последней в списке, но это не помогло.
В чем причина этого и как мне это исправить? Я пробовал переместить в lines(lines)
тело this->lines = lines;
вместо этого, и он отлично работает. Но я бы очень хотел иметь возможность использовать список инициализаторов.
источник