模板和for循环问题

时间:2017-05-10 23:53:53

标签: c++ templates for-loop

我有这个代码,它给我一个错误,指出了两个问题。

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循环的第二行会抛出相同的错误,可能是出于同样的原因。

问题是:为什么我会收到这些错误,我该如何修复它们?

1 个答案:

答案 0 :(得分:2)

您声明源中的函数声明如下:

  

void GraphMatrix :: setVertexInfo(int v,VertexObject&amp; info)

然而,在你的for循环中,你传递的是int类型。要么改变你的功能声明&amp;定义接受int类型或将您传递给函数的类型更改为VertexObject