C++ 调用错误没有匹配函数(默认通过引用传递)
C++ no matching function for call error (defaulting to pass by reference)
我目前正在开发一个将 dijkstra 算法与图形结合使用的程序。我得到了一个函数,该函数应该获取在 Graph
class 中定义的指定顶点的相邻顶点:
template<class VertexType>
void Graph<VertexType>::GetToVertices(VertexType vertex, Queue<VertexType>& adjvertexQ) const
{
int fromIndex;
int toIndex;
fromIndex = IndexIs(vertex);
for (toIndex = 0; toIndex < numVertices; toIndex++)
if (edges[fromIndex][toIndex] != NULL_EDGE)
adjvertexQ.enqueue(vertices[toIndex]);
}
我正尝试在我的客户端文件 dijkstra.cpp
中使用此功能,如下所示:
void assignWeights(Graph<string> &dGraph, int numVertices, VertexType myVertices[], int startingLocation, Queue<string>& getTo)
{
int currV = startingLocation;
dGraph.GetToVertices(myVertices[startingLocation],adjvertexQ);
}
变量 myVertices
是在 main 中定义的结构数组,包含有关每个顶点的信息并且类型为 VertexType
并且 adjvertexQ
是 VertexType
对象的队列用于跟踪相邻的顶点。
给出的错误:
dijkstra.cpp: error: no matching function for call to ‘Graph<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::GetToVertices(VertexType&, Queue<VertexType>&)’
graph.cpp: note: candidates are: void Graph<VertexType>::GetToVertices(VertexType, Queue<VertexType>&) const [with VertexType = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]
问题似乎是我通过引用传递 VertexType
变量,但即使我在同一方法中使用临时值,它仍然将该参数识别为通过引用传递的值。知道什么可以解决这个问题吗?
我假设 assignWeights
不属于 Graph
class。
路过 reference/value/anything 不是这里的问题,
但是您混淆了不同的 VertexTypes。
a) 你有一个函数
void assignWeights(Graph<string> &dGraph, int numVertices, VertexType myVertices[], int startingLocation, Queue<string>& getTo)
其中 VertexType
是 class、结构或其他地方的类型定义。
b) 你有一个 class 方法
template<class VertexType>
void Graph<VertexType>::GetToVertices(VertexType vertex, Queue<VertexType>& adjvertexQ) const
其中 VertexType
是模板类型。这意味着,Graph<VertexType>
有一个方法
GetToVertices(VertexType vertex, Queue<VertexType>& adjvertexQ) const
但是在 assignWeights
中用作参数的 Graph<string>
有一个方法
GetToVertices(string vertex, Queue<string>& adjvertexQ) const
...
因此,在 assignWeights
中,您有一个 Graph<string>
和一个 GetToVertices
想要的字符串,
但是您传递了 VertexType class 的变量。
复制的代码与您的程序构建方式不兼容
(或者您对自己的代码感到困惑)
我目前正在开发一个将 dijkstra 算法与图形结合使用的程序。我得到了一个函数,该函数应该获取在 Graph
class 中定义的指定顶点的相邻顶点:
template<class VertexType>
void Graph<VertexType>::GetToVertices(VertexType vertex, Queue<VertexType>& adjvertexQ) const
{
int fromIndex;
int toIndex;
fromIndex = IndexIs(vertex);
for (toIndex = 0; toIndex < numVertices; toIndex++)
if (edges[fromIndex][toIndex] != NULL_EDGE)
adjvertexQ.enqueue(vertices[toIndex]);
}
我正尝试在我的客户端文件 dijkstra.cpp
中使用此功能,如下所示:
void assignWeights(Graph<string> &dGraph, int numVertices, VertexType myVertices[], int startingLocation, Queue<string>& getTo)
{
int currV = startingLocation;
dGraph.GetToVertices(myVertices[startingLocation],adjvertexQ);
}
变量 myVertices
是在 main 中定义的结构数组,包含有关每个顶点的信息并且类型为 VertexType
并且 adjvertexQ
是 VertexType
对象的队列用于跟踪相邻的顶点。
给出的错误:
dijkstra.cpp: error: no matching function for call to ‘Graph<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::GetToVertices(VertexType&, Queue<VertexType>&)’
graph.cpp: note: candidates are: void Graph<VertexType>::GetToVertices(VertexType, Queue<VertexType>&) const [with VertexType = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]
问题似乎是我通过引用传递 VertexType
变量,但即使我在同一方法中使用临时值,它仍然将该参数识别为通过引用传递的值。知道什么可以解决这个问题吗?
我假设 assignWeights
不属于 Graph
class。
路过 reference/value/anything 不是这里的问题,
但是您混淆了不同的 VertexTypes。
a) 你有一个函数
void assignWeights(Graph<string> &dGraph, int numVertices, VertexType myVertices[], int startingLocation, Queue<string>& getTo)
其中 VertexType
是 class、结构或其他地方的类型定义。
b) 你有一个 class 方法
template<class VertexType>
void Graph<VertexType>::GetToVertices(VertexType vertex, Queue<VertexType>& adjvertexQ) const
其中 VertexType
是模板类型。这意味着,Graph<VertexType>
有一个方法
GetToVertices(VertexType vertex, Queue<VertexType>& adjvertexQ) const
但是在 assignWeights
中用作参数的 Graph<string>
有一个方法
GetToVertices(string vertex, Queue<string>& adjvertexQ) const
...
因此,在 assignWeights
中,您有一个 Graph<string>
和一个 GetToVertices
想要的字符串,
但是您传递了 VertexType class 的变量。
复制的代码与您的程序构建方式不兼容
(或者您对自己的代码感到困惑)