没有类型的声明

时间:2009-11-06 00:52:35

标签: c++ xcode vector

我很困惑。

我这样做:

#include <vector>

// List iteration
typedef vector<registeredObject>::iterator iterator;
typedef vector<registeredObject>::const_iterator const_iterator;
vector<registeredObject>::iterator begin(void);
vector<registeredObject>::const_iterator begin(void) const;
vector<registeredObject>::iterator end(void);
vector<registeredObject>::const_iterator end(void) const;

我收到的错误如下:

.: error: ISO C++ forbids declaration of 'vector' with no type
.: error: expected ';' before '<' token

对于矢量的上述每个用途。这段代码在较旧的CodeWarrior中编译,但XCode抱怨。有什么问题?

有一个很好的参考吗?

[编辑]以下是整个标题Here

3 个答案:

答案 0 :(得分:13)

vector位于命名空间std中:

typedef std::vector<registeredObject>::iterator iterator;

另外,为什么要定义这些类型然后不使用它们?

typedef std::vector<registeredObject> container;
typedef container::iterator iterator;
typedef container::const_iterator const_iterator;

iterator begin(void);
const_iterator begin(void) const;
iterator end(void);
const_iterator end(void) const;

还要考虑您可能尚未定义registeredObject。尝试使用int来确保。


现在我们看到registeredObject是模板参数,您需要typename

typedef typename std::vector<registeredObject> container;
typedef typename container::iterator iterator;
typedef typename container::const_iterator const_iterator;

Here's why.不要忘记其他事情。您仍然需要std::,并且实际使用您定义的类型。 (这必须在两个类中修复。)

请注意,使用T作为模板类型更常见 更常见。对你的typedef慷慨解释也很常见:

typedef T value_type;
typedef std::vector<value_type> container;
typedef typename container::iterator iterator;
typedef typename container::const_iterator const_iterator;

在课堂上使用这些。 (即改为使用container mRegistryList;

答案 1 :(得分:0)

是否声明了registeredObject?你是否包含了RegisteredObject.h?

答案 2 :(得分:0)

如果我不得不猜测,我会说 registeredObject 类型是在某个文件中定义的,但不包含在此头文件中。

一个.CPP文件可能会在 MyIteratorDeclarations.h 之前包含 RegisteredObject.h ,这样可行。但是另一个文件可能只包括 MyIteratorDeclarations.h ,这会产生错误。

目前没有足够的代码可供使用。也许您可以更改示例以显示所有头文件内容,直到第一个错误。