【发布时间】:2010-05-08 22:50:52
【问题描述】:
我正在开发一个应该表示图形的程序。我的问题出在我的 printAdjacencyList 函数中。基本上,我有一个 Graph ADT,它有一个成员变量“nodes”,它是该图节点的映射。每个节点都有一组 Edge* 到它所连接的边。我正在尝试遍历图中的每个节点和节点的每个边。
void MyGraph::printAdjacencyList() {
std::map<std::string, MyNode*>::iterator mit;
std::set<MyEdge*>::iterator sit;
for (mit = nodes.begin(); mit != nodes.end(); mit++ ) {
std::cout << mit->first << ": {";
const std::set<MyEdge*> edges = mit->second->getEdges();
for (sit = edges.begin(); sit != edges.end(); sit++) {
std::pair<MyNode*, MyNode*> edgeNodes = *sit->getEndpoints();
}
}
std::cout << " }" << std::endl;
}
getEdges 声明为:
const std::set<MyEdge*>& getEdges() { return edges; };
get Endpoints 声明为:
const std::pair<MyNode*, MyNode*>& getEndpoints() { return nodes; };
我得到的编译器错误是:
MyGraph.cpp:63: error: request for member `getEndpoints' in
`*(&sit)->std::_Rb_tree_const_iterator<_Tp>::operator->
[with _Tp = MyEdge*]()', which is of non-class type `MyEdge* const'
MyGraph.cpp:63: warning: unused variable 'edgeNodes'
我发现这可能意味着我在某处滥用了 const,但我无法弄清楚我的一生在哪里。任何信息,将不胜感激。谢谢!
【问题讨论】:
-
除非你做这个项目是为了家庭作业或娱乐,否则我建议你只使用 boost 库图形表示。
-
是的,这是一堂课的功课,所以没有提升美感 =(
-
@Jared 祝你好运,然后:) 你也可以考虑用“作业”标签标记这类问题,这样人们就会知道。
-
@Jared @Amir 别担心。如果您不使用 BGL,您可以避免很多头痛。从您自己的模拟图功能转移到 BGL 就像从
stdio.h转移到iostream。有一天你可能会感激不尽,但在那之前,你口中说出的脏话数量不会让英国足球迷感到羞耻。 -
您说
nodes是一张地图,但在getEndpoints中您将其返回为std::pair。这是怎么回事?