我知道这有很多重复,但没有一个答案似乎有帮助。
class Vertex
{
public:
string name; // Vertex name
vector<Vertex *> adj; // Adjacent vertices
int dist; // Cost
Vertex *path; // Previous vertex on shortest path
bool visited;
Vertex( const string & nm ) : name( nm )
{ reset( ); }
void reset( )
{ dist = INFINITY; path = NULL; }
};
void Graph::explore(Vertex *v)
{
//error for v.visited
//error for anything where 'v' is referenced.
v.visited = true;
int total;
for(int i = 0; i < v.adj.size(); i++)
{
cout << v.adj.name << " to ";
if (!v.visited)
{
explore(v.adj[i]);
}
}
}
在阅读其他帖子后,我无法查明错误原因。 (我是c ++的新手)。 其他人可以看到什么吗?错误也在其他方法中。
答案 0 :(得分:2)
v
是一个指针,因此您需要使用指针成员访问运算符(->
)而不是对象成员访问运算符(.
)。
void Graph::explore(Vertex *v)
{
v->visited = true;
int total;
for(int i = 0; i < v->adj.size(); i++)
{
cout << v->name << " to "; // this should be v->name,
// not v->adj.name
if (!v->visited)
{
explore(v->adj[i]);
}
}
}
答案 1 :(得分:-1)
void Graph::explore(Vertex *v)
将v定义为指向顶点的指针。您可以使用v-&gt;成员引用它的成员。我建议将定义更改为:
void Graph::explore(Vertex &v)
将v定义为顶点(使用引用),它只是一个优化,因此在调用函数时不会堆叠整个数据结构。然后你可以v.member
访问v的成员另一种解决方案(不推荐,使用参考更好)是
void Graph::explore(Vertex *v)
{
//error for v.visited
//error for anything where 'v' is referenced.
v->visited = true;
int total;
for(int i = 0; i < v->adj.size(); i++)
{
cout << v->adj.name << " to ";
if (!v->visited)
{
explore(& (v->adj[i]) );
}
}
}
将v定义为指向顶点的指针,但它会更改成员访问和递归调用以反映这一点。