指向矢量的基类在派生类中

Rob*_*son 3 c++ vector multiple-inheritance derived-class

我正在编写一个应用程序,我将通过指向基类的指针访问几个派生类.我希望这些派生类中的一个包含一个指针向量,它是应用程序中的邻居(也是基类类型),如下所示:

    #include <vector>

    class BaseClass
    {
    public:
        BaseClass() { }
        virtual ~BaseClass() { }
    };

    class DerivedClass : virtual public BaseClass
    {
    public:
        DerivedClass() : BaseClass() { }
        ~DerivedClass() { }
    private:
        vector<BaseClass*> Neighbors;
    };
Run Code Online (Sandbox Code Playgroud)

但是,请获取以下编译器错误:

example.cpp:16: error: ISO C++ forbids declaration of ‘vector’ with no type
example.cpp:16: error: expected ‘;’ before ‘<’ token
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?如果有可能请有人指出我的错误!编译器应该知道BaseClass是什么类型,因为它刚刚被声明,事实上声明一个类型的成员BaseClass Foo;工作,所以我不明白为什么向量不能识别BaseClass*.

干杯!

chr*_*ris 5

你没有把两种using namespace std;,using std::vectorstd::vector<...>...

#include <vector>
using std::vector; //choice 1
using namespace std; //choice 2 

class BaseClass
{
public:
    BaseClass() { }
    virtual ~BaseClass() { }
};

class DerivedClass : virtual public BaseClass
{
public:
    DerivedClass() : BaseClass() { }
    ~DerivedClass() { }
private:
    std::vector<BaseClass*> Neighbors; //choice 3
};
Run Code Online (Sandbox Code Playgroud)

  • 选择2是一个非常糟糕的主意,并将不可避免地导致问题!选项1可以进入类的范围,以避免污染包含此文件的代码的命名空间. (5认同)