class Manager : public Person {
int a;
public:
Manager(const Manager& m) : Person(m), a(m.a) { }
};
若報錯「m.a 無可用成員」,通常是 基類 Person 的拷貝構造函數參數類型不匹配,導致 Person(m) 調用失敗,隨後 m.a 解析上下文錯誤。請檢查:
Person 是否聲明 Person(const Person&) 或 Person(const Manager&)?Person 的拷貝構造是否被 delete 或 private?Manager 是否多重繼承導致切片問題?class Person {
public:
Person(const Person& other) = default; // 確保可用
// ...
};
class Manager : public Person {
int a;
public:
Manager(const Manager& m) : Person(m), a(m.a) { } // 正確
// C++11 委託構造寫法
Manager(const Manager& m) : Manager(static_cast(m)) {
a = m.a;
}
};
class A { public: int a; };
class B { public: B(int a) {} };
class C { B b; public: C(const A& a) : b(a.a) {} }; // 編譯通過
int main() {}
上述代碼在 codepad 驗證通過,說明成員初始化列表中 a.m 訪問基類公有成員完全合法。
public 且未刪除。= default 讓編譯器生成正確拷貝/移動操作。