繁体   English   中英

重新定义C错误的类型不兼容

[英]incompatible types for redefinition C error

我有一个函数,需要两个数组作为输入并修改第一个。 我收到一个错误error: incompatible types for redefinition of 'applyChange'第一行中error: incompatible types for redefinition of 'applyChange'

void applyChange(int values[3][3][3], int changeCode[9]){

我检查了一下,并没有意外地尝试两次定义函数。 我还确保我正确地调用了它(即正确的输入并且不期望返回值)。

编辑:

void hillClimb(int values[3][3][3],int pastData[20]){

  int bestVal = evaluateValues(values,pastData);
  int bestCode[9] = {0,0,0,0,0,0,0,0,0};

  int valueChangeCode[9] = {0,0,0,0,0,0,0,0,0};
  int valuesCopy[3][3][3];
  //copyValues(valuesCopy,values);

  while (incrementBaseThree(valueChangeCode,9)){
    copyValues(valuesCopy,values);
    applyChange(valuesCopy,valueChangeCode);
    int evaluation = evaluateValues(valuesCopy,pastData);
    if (evaluation > bestVal) {
      bestVal = evaluation;
      copyChangeCode(bestCode,valueChangeCode);
    }
  }
  applyChange(values,bestCode);

}

void applyChange(int values[3][3][3], int changeCode[9]){

  for (int a = 0; a < 9; a++){
    changeCode[a] --;
  }

  for (int i = 0; i < 3; i++){
    for (int k = 0; k < 3; k++){
      values[i][k][ (0+k) % 3 ] += changeCode[ (3*i) + 0];
      values[i][k][ (1+k) % 3 ] += changeCode[ (3*i) + 1];
      values[i][k][ (2+k) % 3 ] += changeCode[ (3*i) + 2];
    }
  }

  for (int a = 0; a < 9; a++){//we need this so that we don't mess up changeCode in the upper stack frame
    changeCode[a] ++;
  }

}

copyValues和copyChangeCode只是复制相应数组中的值。

现在您已经发布了代码。

您需要调用之前声明applyChange()

void applyChange(int values[3][3][3], int changeCode[9]);

在文件的顶部

您在第61和68行调用函数applyChange() 。但是在第72行定义了该函数。因此,编译器在第61或68行中不知道applyChange()函数。

您现在有两个选择:

1.)将函数applyChange()放在函数调用上方。

2.)添加一个函数原型。

您可能需要在头文件中包含applyChange的原型。 我猜发生了什么事,就是编译器在函数定义之前进入了函数调用,并推断出与实际签名冲突的签名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM