如果我有一个基类,只有虚拟方法和2个派生类
基类,实现了这些虚拟方法.
基类,实现了这些虚拟方法.
我如何:
// causes C2259 BaseClass* base = new BaseClass[2]; BaseClass[0] = new FirstDerivedClass; BaseClass[1] = new SecondDerivedClass;
要么:
// causes "base is being used without being initialized" BaseClass* base; // causes CC59 again BaseClass* base = new BaseClass; base[0] = FirstDerivedClass(); base[1] = SecondDerivedClass();
(或类似的东西)
…所以我可以通过DerivedClass访问BaseClasss方法,
但是通过指针和指针是DerivedClasss的数组?
解决方法
你的数组是错误的类型:它存储BaseClass对象实例,而不是它们的指针.由于BaseClass似乎是抽象的,编译器抱怨说它不能默认构造实例来填充你的数组.
即使BaseClass不是抽象的,在C中使用数组是big no-no,所以你应该在任何情况下做不同的事情.
通过将代码更改为:
BaseClass** base = new BaseClass*[2]; BaseClass[0] = new FirstDerivedClass; BaseClass[1] = new SecondDerivedClass;
也就是说,大多数情况下,最好使用std :: vector而不是纯数组和智能指针(如std :: shared_ptr)而不是愚蠢的指针.使用这些工具而不是手动编写代码将以非常小的运行时代价透明地处理大量问题.