【问题标题】:error C2664: 'way' : cannot convert parameter 4 from 'int' to 'int &'错误 C2664:“方式”:无法将参数 4 从“int”转换为“int &”
【发布时间】:2013-01-16 06:42:58
【问题描述】:

我的代码有问题。

这是我的主线。

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:\users\admin\documents\zad51.cpp(102): 错误 C2664: 'way' : 不能 将参数 4 从 'int' 转换为 'int &'

【问题讨论】:

  • 为什么你可以传入一个文字作为参考?这没有任何意义。

标签: c++


【解决方案1】:

您的way 函数采用非常量引用int&amp;,并且您正在传递诸如0 之类的临时变量。非常量引用不能绑定到临时对象。您需要更改签名以获取 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);

【讨论】:

  • 打败我。剩下的唯一选择是 +1 我猜!
  • 他无法更改签名以获取 const 引用,因为 crrWayWeight 在函数内部进行了修改。
【解决方案2】:

因为您尝试将常量文字作为第四个参数传递。将其分配给变量,即:

int variable = 0;
way(x, y, crrWay, variable, 0, minWay, minWayN, 0);

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多