使用嵌套类而不是多重继承,C++
Using Nested Classes Instead of Multiple Inheritance, C++
我正在尝试使用嵌套类而不是多重继承。我遵循了书中的建议,但我在构造函数中不断出错。基本上,人是祖父,学生和员工是父母,助教是孩子。TeachingAssistant将有一个嵌套类,它将引用它的外部类,但当我使用书中的代码时,我会得到两个错误
我得到错误
错误1*"没有用于初始化TeachingAssistant的匹配构造函数:EmployeePart"
这个错误
错误2"'EmployeePart'的越界定义与'TeachingAssistant::EmployeyPart'中的任何声明都不匹配"
这是代码:
class TeachingAssistant : public Student
{
public:
TeachingAssistant();
private:
class EmployeePart;
EmployeePart* employee_ptr;
};
class TeachingAssistant::EmployeePart : public Employee
{
public:
EmployeePart(TeachingAssistant&);
private:
TeachingAssistant* ta_part; // Allows access back to outer class
};
错误1在此构造函数中
TeachingAssistant::TeachingAssistant()
{
employee_ptr = new EmployeePart(this); // Pass pointer to implicit parameter
}
错误2在这里
TeachingAssistant::EmployeePart::EmployeePart(TeachingAssistant* taval)
: ta_part(taval) {}
如果我提供构造函数,为什么会弹出这些错误?
您的基本问题是您错误地调用了EmployeePart构造函数,并错误地定义了它。然而,在我们解决这一问题的同时,我们还将解决这样一个事实,即您应该不使用new
,不使用拥有内存的原始指针,并且在不需要可为Null性或可重新密封性时不使用指针。
class TeachingAssistant : public Student
{
public:
TeachingAssistant();
TeachingAssistant(const TeachingAssistant&rhs) = delete; // Delete copy constructor.
TeachingAssistant& operator=(const TeachingAssistant&rhs) = delete; // And assignment.
private:
class EmployeePart;
std::unique_ptr<EmployeePart> employee_ptr; // First change here.
};
class TeachingAssistant::EmployeePart : public Employee
{
public:
EmployeePart(TeachingAssistant&);
private:
// Second change here. Store reference, not pointer.
TeachingAssistant& ta_part; // Allows access back to outer class
};
在初始化列表中创建employee_ptr
,并传递*this
,而不是this
。
TeachingAssistant::TeachingAssistant()
: employee_ptr(std::make_unique<EmployeePart>(*this)) // Pass reference to constructor
{
}
第四个变化在下一行:
TeachingAssistant::EmployeePart::EmployeePart(TeachingAssistant& taval)
: ta_part(taval) {}
EmployeePart(TeachingAssistant&);
您的构造函数想要引用,但您传递的是带有is指针的this
employee_ptr = new EmployeePart(this);
通过*而不是
第二个错误。您的声明与定义不同。参见TeachingAssistant* taval
和EmployeePart(TeachingAssistant&);
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- C++多重继承和鸭子类型
- C++两次从文件保存对象读取多重继承
- 从多重继承中的派生类函数调用适当的父类函数
- C++具有多重继承的构造函数重载解析