2013-01-15 158 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); 
相關問題