我很迷惑.
我这样做:
#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;
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
.: error: ISO C++ forbids declaration of 'vector' with no type
.: error: expected ';' before '<' token
Run Code Online (Sandbox Code Playgroud)
对于矢量的上述每个用途.这段代码在较旧的CodeWarrior中编译,但XCode抱怨.有什么问题?
有一个很好的参考?
[编辑]这是整个标题在这里
GMa*_*ckG 13
vector
在命名空间中std
:
typedef std::vector<registeredObject>::iterator iterator;
Run Code Online (Sandbox Code Playgroud)
另外,为什么要定义这些类型然后不使用它们?
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;
Run Code Online (Sandbox Code Playgroud)
还要考虑一下,也许你没有定义registeredObject
.试着int
确保.
现在我们看到的registeredObject
是模板参数,您需要typename
:
typedef typename std::vector<registeredObject> container;
typedef typename container::iterator iterator;
typedef typename container::const_iterator const_iterator;
Run Code Online (Sandbox Code Playgroud)
这就是原因.但是,不要忘记其他事情.您仍然需要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;
Run Code Online (Sandbox Code Playgroud)
并在课堂上使用这些.(即container mRegistryList;
改为使用)