Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量迭代器_C++ - Fatal编程技术网

C++ 向量迭代器

C++ 向量迭代器,c++,C++,我有一个像这样的向量 std::vector<Sprite*> mDrawings; std::vector<Sprite*>::iterator it = mDrawings.begin(); std::向量mDrawings; std::vector::iterator it=mDrawings.begin(); 这是一个错误 Error: no suitable user-defined conversion from std::_Vector_iterator

我有一个像这样的向量

std::vector<Sprite*> mDrawings;
std::vector<Sprite*>::iterator it = mDrawings.begin();
std::向量mDrawings;
std::vector::iterator it=mDrawings.begin();
这是一个错误

Error: no suitable user-defined conversion from std::_Vector_iterator<std::_Vector_val<Sprite *, std::allocator<Sprite *>>> to std::_Vector_iterator<std::_Vector_val<Sprite *, std::allocator<Sprite *>>> exists
错误:不存在从std::\u Vector\u迭代器到std:\u Vector\u迭代器的合适的用户定义转换
但是如果我做了下面的事情

typedef std::vector<Sprite*> list;
list mDrawings;
list::iterator it = mDrawings.begin();
typedef标准::向量列表;
列出图纸;
list::iterator it=mDrawings.begin();
那它就行了

更新:
很抱歉,似乎是由于与当前代码无关的错误而生成错误。我刚刚看到IDE下划线为红色,我认为这就是我的应用程序无法编译的原因。

我认为您粘贴了错误的代码-我认为您可能粘贴了
std::vector::iterator it=mDrawings.begin()不带
*

编辑:回答更新的问题:


始终查看第一个编译器错误-您的代码在ideone上发布时,缺少一个
#include
,这使得
Sprite
可见。

我认为您粘贴了错误的代码-我认为您可能粘贴了
std::vector::iterator it=mDrawings.beging()不带
*

编辑:回答更新的问题:


始终查看第一个编译器错误-您在ideone上发布的代码缺少
#include
,这使得
Sprite
可见。

粘贴的代码实际上没有显示错误。然而,这是另一个黑暗中的镜头:

在您最初的情况下,
mDrawings
是否可能是某个类的成员变量(只是从
m
前缀中猜测),而您的实际代码是否在const方法中?如果是这样,您将尝试将
常量迭代器
(因为在常量向量上调用
begin()
)将其分配给
迭代器,这是不可能的

试用

std::vector<Sprite *>::const_iterator it = mDrawings.begin();
std::vector::const_迭代器it=mDrawings.begin();

这样更好吗?

粘贴的代码实际上不会显示错误。然而,这是另一个黑暗中的镜头:

在您最初的情况下,
mDrawings
是否可能是某个类的成员变量(只是从
m
前缀中猜测),而您的实际代码是否在const方法中?如果是这样,您将尝试将
常量迭代器
(因为在常量向量上调用
begin()
)将其分配给
迭代器,这是不可能的

试用

std::vector<Sprite *>::const_iterator it = mDrawings.begin();
std::vector::const_迭代器it=mDrawings.begin();


这样更好吗?

你能告诉我们整个错误吗?我真的看不出这里有什么问题……只是一个提示:如果您的编译器支持TR1,那么可以使用
autoit=mDrawings.begin()
而不是
std::vector::iterator it=mDrawings.begin()
在ideone.com上发布一个完整的、最小的测试用例来演示这个问题。下面是一个简化的代码示例:@madslee:我已经为您解决了其中的问题:-它没有演示这个问题。您能告诉我们整个错误吗?我真的看不出这里有什么问题……只是一个提示:如果您的编译器支持TR1,那么可以使用
autoit=mDrawings.begin()
而不是
std::vector::iterator it=mDrawings.begin()在ideone.com上发布一个完整的、最小的测试用例来演示这个问题。下面是一个精简的代码示例:@madslee:我已经为您解决了其中的问题:-它没有演示这个问题。如果是这样的话,typedef将不会有帮助。@Erik:取决于他在哪里做了typedef(和对象实例化);也许他是在const方法中完成的(在这种情况下它会工作,<代码> Mult画附图< /代码>会使成员变量变暗)。Hi Frerich,我想你猜对了,我对C++很新,但是请看一下,更改为const_iterator没有帮助:)@madsleejensen:ideone上发布的代码没有您描述的问题。如果是这样的话,typedef也不会有帮助。@Erik:取决于他在哪里做了typedef(和对象实例化);也许他是在const方法中完成的(在这种情况下它会工作,<代码> Mult画附图< /代码>会使成员变量变暗)。Hi Frerich,我想你猜对了,我对C++很新,但是请看一下,改为const_iterator也没用:)@Madsleyensen:ideone上发布的代码没有你描述的问题。你完全正确,正如我在更新中描述的那样,我很抱歉,我习惯于盲目地强调,如果IDE用红色标记一行,我可以认为这就是问题所在:)(问题不在于我没有包括精灵。h,那只是pastebin转储中的一个输入错误)你完全正确,正如我在更新中所描述的,我很抱歉,我习惯于盲目地强调,如果IDE用红色标记一行,我可以认为这就是问题:)(问题不是我没有包括Sprite.h,那只是pastebin转储中的一个输入错误)