背景是我正在为一个玩家做一个地下城和龙的迷你游戏。在分解中,我得到了:
prototipo.c:313:6:错误:'esObjeto'的冲突类型
bool esObjeto(int ubicacionMatriz,int * personaje){
^ ~~~~~~~
prototype.c:218:15:注意:先前隐含的'esObjeto'声明就在这里
verdad = esObjeto(地方,英雄);
^ ~~~~~~~
假设:
int place = int ** matrix [i] [j];
int * hero = who takes life, experience, portions, damage and defense.
但仍然会抛出错误。
任何解决方案?
bool esObjeto(int ubicacionMatriz, int * personaje){
if(ubicacionMatriz==2){
Porciones(1);
return true;
}
else if(ubicacionMatriz==3){
Tesoro(3);
return true;
}
else if(ubicacionMatriz>=4 && ubicacionMatriz<=8){
Luchar(ubicacionMatriz, personaje);
if(personaje[0]>0){
return true;
}
else{
return false;
}
}
else{
return false;
}}
答案 0 :(得分:0)
prototype.c:218:15:注意:先前隐含的'esObjeto'声明就在这里
verdad = esObjeto (place, hero);
根据较旧的C语言(不是C ++),您可以在不首先提供函数原型的情况下调用函数。编译器可以查看参数类型并假定返回值为int
。这被称为“隐含声明”。
如果“猜测”是正确的,那么有效。
然而,稍后在文件中看到
bool esObjeto(int ubicacionMatriz, int * personaje)
并注意到其先前的假设不正确。该函数实际返回bool
而不是int
。所以现在它已经错误地在前一个函数中编译了调用。
糟糕!!
对此的解决方案是在使用函数声明之前将其移动。或者至少在文件开头提供原型,因此编译器可以知道返回类型。