// Standard Template Library example
#include <iostream>
#include <list>
using namespace std;
// Simple example uses type int
main()
{
list<int> L;
L.push_back(0); // Insert a new element at the end
L.push_front(0); // Insert a new element at the beginning
L.insert(++L.begin(),2); // Insert "</span><span title="Convert this amount" class="currency_converter_link">2</span><span class="currency_converter_text">" before position of first argument
// (Place before second argument)
L.push_back(5);
L.push_back(6);
static list<int>::iterator itr = 0 ;
if(itr == L.end())
{
cout <<"itr is equal to NULL;)" ;
}
else
{
cout <<"Not NULL ";
}
for(itr=L.begin(); itr != L.end(); ++itr)
cout << *itr << " ";
cout << endl;
return 0;
}
我有很简单的代码,抛出一个简单的错误。
iterator.cpp:16:29: error: conversion from 'int' to non-scalar type 'std::list<i
nt>::iterator' requested
我对C ++很陌生,处理这个错误的最佳方法是什么,以便代码可以很好地编译。 仅供参考,当您将相同的代码从GCC 3.1.2切换到4.2.2时,它的移植问题。 基本上整个问题围绕一行编织
static list<int>::iterator itr = 0 ;
好像有人指导我阅读有关这些迭代器的好文档。由于旧的海湾合作委员会正在接受这些事情或只是发出警告,但现在他们正在考虑这个和错误。
我很好奇,因为我们将NUL分配给指针并与NULL进行比较,所以当涉及到迭代器时,它是等价的。
请帮助。 谢谢......
答案 0 :(得分:2)
更改如下:
static list<int>::iterator itr = 0 ;
到
static list<int>::iterator itr = L.begin() ;
BTW,为什么这被声明为静态局部变量?
答案 1 :(得分:1)
只需删除显式初始化(另外,删除后续的if
- else
)。
当迭代器实际上是指针时,初始化= 0
可以工作,因为编译时常量整数0被视为空指针常量。
当迭代器不是指针类型时,它不需要支持那种初始化。
干杯&amp;第h。,
答案 2 :(得分:0)
首先,错误:
iterator.cpp:16:29: error: conversion from 'int'
to non-scalar type 'std::list<i nt>::iterator' requested
您看到此消息是因为您尝试在此行中将iterator
初始化为int
:
static list<int>::iterator itr = 0 ;
编译器不知道如何将int
转换为iterator
- 因此错误。不确定为什么你已将iterator
声明为static
- 我认为没有理由这样做。 (这不是错误的原因,但在这里没有任何意义。)
继续,这段代码:
if(itr == L.end())
{
cout <<"itr is equal to NULL;)" ;
}
else
{
cout <<"Not NULL ";
}
就我而言,......并没有多少用处。您刚刚使用iterator
初始化了0
,那么为什么要测试它的价值呢?
我建议删除if-else
语句,并在for
循环范围内初始化迭代器,如下所示:
int main()
{
list<int> L;
L.push_back(0);
L.push_front(0);
L.insert(++L.begin(),2);
L.push_back(5);
L.push_back(6);
for(list<int>::iterator itr = L.begin(); itr != L.end(); ++itr)
cout << *itr << " ";
cout << endl;
return 0;
}