我的c代码中的本地布尔代码出错了

时间:2018-04-29 14:50:55

标签: c

背景是我正在为一个玩家做一个地下城和龙的迷你游戏。在分解中,我得到了:

  

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;
}}

1 个答案:

答案 0 :(得分:0)

  

prototype.c:218:15:注意:先前隐含的'esObjeto'声明就在这里

  verdad = esObjeto (place, hero);

根据较旧的C语言(不是C ++),您可以在不首先提供函数原型的情况下调用函数。编译器可以查看参数类型并假定返回值为int。这被称为“隐含声明”。

如果“猜测”是正确的,那么有效。

然而,稍后在文件中看到

bool esObjeto(int ubicacionMatriz, int * personaje)

并注意到其先前的假设不正确。该函数实际返回bool而不是int。所以现在它已经错误地在前一个函数中编译了调用。

糟糕!!

对此的解决方案是在使用函数声明之前将其移动。或者至少在文件开头提供原型,因此编译器可以知道返回类型。