我正在编写一个应用程序,我将通过指向基类的指针访问几个派生类。我希望这些派生类中的一个在应用程序中包含指针的向量(它也是基类类型),如下所示:
#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 ‘<’ token
这甚至可能吗?如果有可能请有人指出我的错误!编译器应该知道BaseClass与刚刚声明的类型是什么类型,实际上声明类型为BaseClass Foo;
的成员有效,所以我不明白为什么向量无法识别BaseClass *。
干杯!
答案 0 :(得分: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
};
答案 1 :(得分:1)
打算对答案#1发表评论:你应该避免在头文件中使用“使用...”声明。将它们保存在实现文件(.cpp)中。 Google的风格指南提供了原始海报和答案人可能会发现有用的一些其他信息:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces。我不认可谷歌风格作为一个整体。