我有这个代码,它给我一个错误,指出了两个问题。
int healthyConst = 0;
int sickConst = 1;
int recoveredConst = 2;
GraphMatrix<int, double> graph (100);
for (int i = 0; i < sampleSize; i++)
{
if(std::rand() % 2 > 0.05) graph.setVertexInfo(i, sickConst); //Error
else graph.setVertexInfo(i, healthyConst);
}
错误是:
错误:没有匹配函数来调用GraphMatrix :: setVertexInfo(int&amp;,int *)
有问题的函数在源代码中声明如下:
void GraphMatrix :: setVertexInfo(int v,VertexObject&amp; info)
首先,我不应该参考。这对我来说似乎没有意义,但我无法解决这个问题。如果我试图超越编译器并输入for(int* i = 0...)
,则错误现在会引发setVertexInfo(int&*, int*)
,我甚至不明白这意味着什么。
其次,sickConst不是指针。它只是一个int。现在我意识到这个方法,正如所写,接受VertexObject&amp;而不是VertexObject,但*sickConst
也会导致编译器抱怨invalid type argument of 'unary *'
。我还尝试了&sickConst
,编译器不会意外地将其解释为指针。
另请注意,for循环的第二行会抛出相同的错误,可能是出于同样的原因。
问题是:为什么我会收到这些错误,我该如何修复它们?
答案 0 :(得分:2)
您声明源中的函数声明如下:
void GraphMatrix :: setVertexInfo(int v,VertexObject&amp; info)
然而,在你的for循环中,你传递的是int
类型。要么改变你的功能声明&amp;定义接受int
类型或将您传递给函数的类型更改为VertexObject
。