Я начал пробовать стандарт С++ 11 и нашел этот вопрос, который описывает, как вызывать ваш ctor из другого ctor в том же классе, чтобы избежать использования метода init или чего-либо подобного. Теперь я пытаюсь сделать то же самое с кодом, который выглядит следующим образом:
HPP:
class Tokenizer
{
public:
Tokenizer();
Tokenizer(std::stringstream *lines);
virtual ~Tokenizer() {};
private:
std::stringstream *lines;
};
каст:
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;
, и он работает нормально. Но я действительно хотел бы иметь возможность использовать список инициализатора.