J'ai commencé à essayer le standard C ++ 11 et j'ai trouvé cette question qui décrit comment appeler votre ctor à partir d'un autre ctor de la même classe pour éviter d'avoir une méthode init ou autre. Maintenant, j'essaye la même chose avec un code qui ressemble à ceci:
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)
{
}
Mais cela me donne l'erreur:
In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’:
/path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation
j'ai essayé de déplacer la partie Tokenizer () en premier et en dernier dans la liste, mais cela n'a pas aidé.
Quelle est la raison derrière cela et comment dois-je y remédier? J'ai essayé de déplacer le lines(lines)
vers le corps avec à la this->lines = lines;
place et cela fonctionne très bien. Mais j'aimerais vraiment pouvoir utiliser la liste des initialiseurs.
la source