2

誰でもコードの問題を教えてください

#include <iostream>
#include <vector>

using namespace std;

class Header
{
};


int main()
{
        Header* _start;
        vector<Header>::iterator it = _start;
        return 0;
}

エラー:

Header*'から非スカラー型への変換:

   __gnu_cxx::__normal_iterator<Header*, std::vector<Header,
   std::allocator<Header> > >' requested

前もって感謝します

4

2 に答える 2

2

変化する

vector<Header>::iterator it = _start;

vector<Header>::iterator it(_start);

編集: 問題は、割り当てを使用する場合、コンパイラがそのようなコードに展開することです:

vector<Header>::iterator it = static_cast<vector<Header>::iterator>(_start);

ただし、ポインターから反復子への暗黙的または明示的な型変換はありません。

一方、 iterator には、T::iterator(const T *&)使用できるコンストラクターがあります。

EDIT2: ポインター (C スタイル) とイテレーター (C++ スタイル) を混在させるのはあまり良い考えではありません。配列 (C スタイル) の代わりにコンテナー (C++ スタイル) を使用している場合、生のポインターを使用する必要はありません。コンテナーは、異なる反復子を取得するメソッドを提供します。

たとえば、v.begin() + i代わりに使用する必要があります(T*)&v[i]

于 2013-05-29T07:20:05.947 に答える
0

vector<Header>::iteratorと同じ型ではないことを意味しHeader*ます。

初期化する場合は、次のように記述します。

vector<Header>::iterator it;

有効なものを指すようにしたい場合は、vectorオブジェクトから反復子を取得する必要があります。

vector<Header> headers;

it = headers.begin();
//or
it = headers.end();
于 2013-05-29T07:31:53.687 に答える