Zacząłem wypróbowywać standard C ++ 11 i znalazłem to pytanie, które opisuje, jak wywołać twojego ctora z innego ctora w tej samej klasie, aby uniknąć posiadania metody init lub podobnej. Teraz próbuję tego samego z kodem, który wygląda następująco:
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)
{
}
Ale to daje mi błąd:
In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’:
/path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation
próbowałem przenieść część Tokenizera () jako pierwszą i ostatnią na liście, ale to nie pomogło.
Jaki jest tego powód i jak mam to naprawić? Zamiast tego próbowałem przenieść lines(lines)
do ciała this->lines = lines;
i działa dobrze. Ale naprawdę chciałbym móc korzystać z listy inicjalizacyjnej.
źródło