2013-01-15 132 views
1

我遇到代码问题。错误C2664:'way':无法将参数4从'int'转换为'int&'

这是我的主要。

int main() 
{ 
    cin>>xG>>yG; 
    int x,y; 
    cin>>x>>y; 
    int crrWay[200] = {0}, 
     minWay[200] = {0}, 
     minWayN = -1; 
    way(x, y, crrWay, 0, 0, minWay, minWayN, 0); 
    printWay(minWay, minWayN); 
    return 0; 
} 

这是函数。

void way(int x, int y, int *crrWay, int& crrWayWeight, int l, int* minWay, int& minWayN, int& minWayWeight) 
{ 
    crrWay[2*l] = x; 
    crrWay[2*l+1] = y; 

    if(x < 0 || y < 0 || x > 10 || y > 10) 
     return; 

    // Сравнява намерения път с минималния 
    if(x == xG && y == xG) 
    { 
     registerWay(crrWay, l+1, minWay, minWayN, crrWayWeight, minWayWeight); 
     return; 
    } 

    // Клетката е непроходима. 
    if(tempMaze[x][y]==0) 
     return; 
    tempMaze[x][y] = 0; 
    crrWayWeight+=maze[x][y]; 

    // Рекурсивни обръщения към всеки от четирите съседа 
    way(x+1, y, crrWay, crrWayWeight, l+1, minWay, minWayN, minWayWeight); 
    way(x, y+1, crrWay, crrWayWeight, l+1, minWay, minWayN, minWayWeight); 
    way(x-1, y, crrWay, crrWayWeight, l+1, minWay, minWayN, minWayWeight); 
    way(x, y-1, crrWay, crrWayWeight, l+1, minWay, minWayN, minWayWeight); 

    // връщане назад 
    tempMaze[x][y] = 1; 
} 

代码无法编译。它说

1> C:\用户\管理员\文件\ zad51.cpp(102):错误C2664: '方式':不能 转换参数4从 'INT' 到 'INT &'

+0

为什么你能够传入字面值作为参考?这个不成立。 – chris

回答

5

您的way函数采用非常量引用int&,并且您正在传递诸如0之类的临时对象。非const引用不能绑定到临时对象。您需要更改签名以获取const引用,或者,如果该函数实际改变了引用的int,则不要传递临时对象。

void way(int x, int y, int *crrWay, const int& crrWayWeight, int l, int* minWay, const int& minWayN, const int& minWayWeight); 

int a = 0; 
int b = 0; 
int c = 0; 
way(x, y, crrWay, a, b, minWay, minWayN, c); 
+0

打败我吧。我唯一的选择就是+1! – Steve

+1

他不能更改签名以接受const引用,因为crrWayWeight **在函数内部被**修改。 –

1

way函数取为整数作为其第四个参数的参考。你不能传递一个文字(又名右值)。一个对象的引用总是一个左值或变量。你应该做的是做一个变量,并将其传递给函数调用。

1

因为您尝试传递常量字面量作为第四个参数。分配给变量例如:

int variable = 0; 
way(x, y, crrWay, variable, 0, minWay, minWayN, 0); 
相关问题