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()按照. 但是您的代码中还有其他问题。在插入地图时,您正在将局部变量的地址插入其中。当您尝试使用循环迭代地图时,此地址将无效。我建议您声明地图,以便在将 MyVertex 的副本插入地图时插入地图。*iteratorpair<string, MapVertex*>forstd::map<string, 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,而不是你的对象;pair的第一个元素是key,第二个是value,所以需要先获取value,然后调用方法:it->second->method()

于 2012-04-23T05:32:53.223 回答