Ich habe angefangen, den C ++ 11-Standard auszuprobieren, und ich habe diese Frage gefunden , die beschreibt, wie Sie Ihren ctor von einem anderen ctor in derselben Klasse aufrufen, um eine init-Methode oder ähnliches zu vermeiden. Jetzt versuche ich dasselbe mit Code, der so aussieht:
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)
{
}
Dies gibt mir jedoch den Fehler:
In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’:
/path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation
Ich habe versucht, den Tokenizer () - Teil zuerst und zuletzt in der Liste zu verschieben, aber das hat nicht geholfen.
Was ist der Grund dafür und wie soll ich das beheben? Ich habe versucht lines(lines)
, den Körper this->lines = lines;
stattdessen mit zu bewegen , und es funktioniert gut. Aber ich würde wirklich gerne die Initialisierungsliste verwenden können.
quelle