der*_*dji 0 c++ inheritance typedef vector
这是我的一段代码,我有更多的类,如MathStudent,ArtStudent等,它继承了Student类.当我试图编译时,它说"禁止没有类型的'vector'的声明,"这里有什么问题?谢谢
class Student {
public:
typedef vector<Student> Friends; // something wrong here?
virtual unsigned int getId() = 0;
//some more pure virtual functions...
};
Run Code Online (Sandbox Code Playgroud)
Joh*_*nck 10
您不能使用尚未定义的类.但是,您可以使用指向该类的指针.
您现在的具体错误可能是您忘记#include <vector>或做的using namespace std;.但是一旦你解决了这个问题,你就需要我的第一个建议.
typedef的一个问题是它class Student是一个抽象类,因此它不能是默认构造的,这对于可以组成向量的类型是必需的.
另一个问题(假设您删除了class Student抽象的事实)可能是该类未完全定义.实际上,您可以为vector<>具有不完整类的a声明typedef ,但在完全定义类之前,您将无法实际使用typedef - 除非声明指针或对该类型的引用.
在这两种情况下,您可能需要考虑类的整体设计 - 您可能希望有一个vector<Student*>替代,因此向量可以容纳任何类型的学生(使用指针,因为它不能容纳实际的抽象Student对象).正如其他人提到的那样,使用智能指针(但不是 std::auto_ptr<>)会有助于管理向量所指向的对象的生命周期.