3

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

    #include <vector>

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

    class DerivedClass : virtual public BaseClass
    {
    public:
        DerivedClass() : BaseClass() { }
        ~DerivedClass() { }
    private:
        vector<BaseClass*> Neighbors;
    };

但是,得到以下编译器错误:

example.cpp:16: error: ISO C++ forbids declaration of ‘vector’ with no type
example.cpp:16: error: expected ‘;’ before ‘&lt;’ token

这甚至可能吗?如果可能,请有人指出我的错误!编译器应该知道刚刚声明的 BaseClass 是什么类型,实际上声明类型的成员是BaseClass Foo;有效的,所以我不明白为什么向量无法识别 BaseClass*。

干杯!

4

2 回答 2

5

你没有放using namespace std;, using std::vector, 或std::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
};
于 2012-04-22T15:58:16.270 回答
1

旨在作为对答案 #1 的评论:您应该避免在头文件中“使用 ...”声明。将它们保存在实现文件 (.cpp) 中。Google 的样式指南提供了一些附加信息,原始发帖人和回答者可能会觉得有帮助:http: //google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces。我不认可整个谷歌风格。

于 2012-04-22T16:13:49.503 回答