// 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;
}
私は非常にシンプルで簡単なエラーを投げています。GCC 3.1.2から4.2.2への移植時にコードが壊れている
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 ;
ある1行を中心に編成されます。古いGCCがこれらのことを受け入れるか、ただ警告を投げていたので、今、彼らはこれとエラーを考えています。 NULをポインタに割り当て、NULLと比較すると、イテレータになると同等であることが不思議です。
助けてください。 ありがとう...
私は「破壊」は、あなたのコード内で – Chubsdad
ままの警告音を聞くことができています何かが間違っているという良い兆候です。警告は、コードが移植性がない可能性があることを意味します。警告は通常論理的なエラーです(構文上/意味上のエラーではないにしても)、すべての警告をエラーとして扱います(そして、警告レベルを(合理的に)可能な限り高くしてください) –
なぜイテレータはNULLになりますか?そのイテレータはポインタではありません(その下には、実装の詳細を示すポインタがありますが、これは間違いなく頼りにしてください)。 –