ฉันได้เริ่มลองใช้มาตรฐาน C ++ 11 แล้วและฉันพบคำถามนี้ซึ่งอธิบายถึงวิธีการเรียก ctor ของคุณจาก ctor อื่นในคลาสเดียวกันเพื่อหลีกเลี่ยงการมีวิธีการเริ่มต้นหรือสิ่งที่คล้ายกัน ตอนนี้ฉันกำลังลองสิ่งเดียวกันกับรหัสที่มีลักษณะดังนี้:
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;
แทนแล้วก็ใช้ได้ดี แต่ฉันอยากจะใช้รายการตัวเริ่มต้นจริงๆ