Я почав випробовувати стандарт C ++ 11, і я знайшов це питання, в якому описано, як викликати ваш ctor з іншого ctor того ж класу, щоб уникнути використання методу init тощо. Зараз я намагаюся те ж саме з кодом, який виглядає приблизно так:
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;
а це працює чудово. Але я дуже хотів би мати можливість використовувати список ініціалізатора.