Comecei a experimentar o padrão C ++ 11 e encontrei esta pergunta que descreve como chamar seu ctor de outro ctor na mesma classe para evitar um método init ou semelhante. Agora estou tentando a mesma coisa com um código parecido com este:
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)
{
}
Mas isso está me dando o erro:
In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’:
/path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation
tentei mover a parte Tokenizer () primeiro e último na lista, mas isso não ajudou.
Qual é a razão por trás disso e como devo consertar? Tentei mover o lines(lines)
para o corpo com this->lines = lines;
e funcionou bem. Mas eu realmente gostaria de poder usar a lista de inicializadores.
fonte