我对C ++比较陌生,我正在创建一个假设的飞行管理'应用作为学习经验并测试各种新技能。简单地说,我有一个FlightPlan
类,其中包含指向Aircraft
类型对象的私有成员指针(好吧,现在)。
Aircraft
派生的对象在创建FlightPlan
时已预先存在,我希望能够将Aircraft
派生对象指针指定给FlightPlan
在建造FlightPlan
之后(而不仅仅是在施工期间)(将在计划中执行飞行的空调)。
(使用诸如
flight-plan-obj.AssignAircaft(cargo-aircraft-obj-pointer);
我的问题是Aircraft
是CargoAircraft
和PassengerAircraft
派生的抽象类,因此不知道'键入'在其建造过程中,飞机将被分配到飞行计划中。我的代码如下。 (为简洁起见,遗漏了很多)
class FlightPlan {
private:
string departure;
string destination;
Aircraft* aircraft; // The a/c that will later be assigned to the flight
// Obviously this is currently wrong
public:
FlightPlan(string dep, string dest);
void AssignAircraft(Aircraft* ac);
// Other methods
}
Aircraft
抽象类:
class Aircraft {
protected:
Aircaft(string tailId, string acType); // ctor for the sub-classes
string tailId;
string acType;
public:
virtual string Overview() const =0; // pure virtual method
}
来自Aircraft
的对象示例:
class CargoAircraft : public Aircraft {
private:
int cargoCapacity;
public:
CargoAircraft(string tailId, string acType, int cargoCapcity);
string Overview() const override;
}
// ctor defined in the .cpp file as:
CargoAircraft::CargoAircraft(string tailId, string acType, int cargoCapacity)
: Aircraft(tailId,acType), cargoCapacity(cargoCapacity) {};
我正在尝试做什么?我的理解是指针多态性允许我这样做:
Aircraft* aircraft; or Aircaft* aircraft = nullptr;
FlightPlan
中的,以后会接受从Aircraft
派生的类的对象指针?
在编译时我收到:错误:'飞机'没有命名类型
我的方法在这里存在根本错误吗?我是否需要放弃Aircraft
是抽象的,只是将它视为更多的基类并给它一个公共默认构造函数并使它的方法只是虚拟而不是纯虚拟?
任何和所有建议都将得到慷慨接受,我将非常感激地接受有关我使用C ++的任何其他提示或提示。谢谢。
答案 0 :(得分:2)
你可以做两件事,
在FlightPlan中以后会接受从飞机派生的类的对象指针?在编译时我收到:错误:'飞机'没有命名类型
标题必须包含在飞机类中,因此它在Flightplan之前声明。或者您可以像这样使用前向声明
class Aircraft;
告诉飞机类型的编译器它存在,并且可以声明你在Flightplan类中使用指针。
你的问题只是关于飞机类型的存在。使用前向声明或保证在宣布Flightplan之前声明该类。
P.S。不要忘记Aircaft课程中的virtual destructor