0

イテレータを使用してマップ内のデータにアクセスできません。イテレータを使用して、マップに挿入されたすべての値を返したい。ただし、イテレータを使用すると、過去のクラスのインスタンスのメンバーを認識しません。

int main()
{
    ifstream inputFile;
    int numberOfVertices;
    char filename[30];
    string tmp;

    //the class the holds the graph
    map<string, MapVertex*> mapGraph;

    //input the filename
    cout << "Input the filename of the graph: ";
    cin >> filename;
    inputFile.open(filename);

    if (inputFile.good())
    {
        inputFile >> numberOfVertices;
        inputFile.ignore();

        for (int count = 0; count < numberOfVertices; count++)
        {
            getline(inputFile, tmp);
            cout << "COUNT: " << count << "  VALUE: " << tmp << endl;

            MapVertex tmpVert;
            tmpVert.setText(tmp);
            mapGraph[tmp]=&tmpVert;
        }

        string a;
        string connectTo[2];

        while (!inputFile.eof())
        {

            //connectTo[0] and connectTo[1] are two strings that are behaving as keys

            MapVertex* pointTo;
            pointTo = mapGraph[connectTo[0]];
            pointTo->addNeighbor(mapGraph[connectTo[1]]);
            //map.find(connectTo[0]).addNeighbor(map.find(connectTo[1]));
            //cout << connectTo[0] << "," << connectTo[1] << endl;
        }

        map<string,MapVertex*>::iterator it;
        for (it=mapGraph.begin(); it!=mapGraph.end(); it++)
        {
            cout << it->getText() << endl;

        }
    }

    return 0;
}

コンパイラ出力:

\lab12\main.cpp||In function `int main()':|
\lab12\main.cpp|69|error: 'struct std::pair<const std::string, MapVertex*>'
                           has no member named 'getText'|
||=== Build finished: 1 errors, 0 warnings ===|

MapVertexクラスにはgetText()というアクセスメンバーがあり、その中にあるデータを返します。

4

3 に答える 3

4

it->second->getText()コンパイラエラーを修正するには、がであるため、これを行う必要があり*iteratorますpair<string, MapVertex*>。しかし、コードには他にも問題があります。マップに挿入するときに、ローカル変数のアドレスをマップに挿入します。forこのアドレスは、ループを使用してマップを反復しようとするときには無効になります。std::map<string, MyVertex>マップに挿入するときにMyVertexのコピーがマップに挿入されるように、マップを宣言することをお勧めします。

于 2012-04-23T05:30:18.780 に答える
2

tmpVert問題です。ほら、あなたはそれをスタック上に作成します。for各ループの終わりに破棄されます。

破壊されます。

つまり、あなたmapGraphは存在しないオブジェクトへのポインタを保持しています。

于 2012-04-23T05:30:57.187 に答える
1
'struct std::pair' has no member named 'getText'

イテレータが返すのは std::pair であり、直接オブジェクトではないことを意味します。ペアの最初の要素はキー、2 番目の要素は値であるため、値を取得してからメソッドを呼び出す必要がありますit->second->method()

于 2012-04-23T05:32:53.223 に答える