我很困惑。
我这样做:
#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
答案 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 ,这会产生错误。
目前没有足够的代码可供使用。也许您可以更改示例以显示所有头文件内容,直到第一个错误。