错误:声明与'function name'无法比较

Error: Declaration is incomparable with 'function name'

本文关键字:比较 name function 声明 错误      更新时间:2023-10-16

我要做的是将对象(类)传递到函数构造函数中。代码基本上是这样的:

class Primary{
    Primary(void);
      ~Primary(void);
};
//champion.h
//looks like
public:
Champion(void);
Champion::Champion(char name1[], int stringLength, int type1, double health1, int fluid1, double armor1, double specialA1, double damage);
char* getName(void);
double getHealth(void);
int getFluid(void);
double getArmor(void);
double getSpecialA(void);
double getDamage(void);
int type;
void setHealth(double health);
void setFluid(int fluid);
void setArmor(double armor);
void setSpecialA(double specialA);
void setDamage(double physDamage);
void setPrimary(Primary prime1);

//champion is another class
void Champion::setPrimary(Primary prime1)
{
   prime = prime1
}

我的大部分代码都在这里http://codepad.org/PMHZNtF9

我得到一个错误,说

错误:声明是不可比较的的空白冠军::setPrimary (') "(在冠军中宣布)"

我不确定这意味着什么,但我知道可以通过参数将类的对象传递到函数中。我做错了什么?为了更清楚一点,我想知道误差是什么意思。据我所知,所有东西都是这样宣布的。看一看,给我一些建议,可能是什么问题,希望我没有一个小的打字错误!

愚蠢的问题,但是这些都在一个文件中吗?如果没有,冠军赛。cpp(或者不管它叫什么)是否有对Primary类的引用,通过#include "primary.h" ?

编辑:

如果我做一个快速的重构,到目前为止你所展示的可以编译。我直接看到的是最后一段代码

void Champion::setPrimary(Primary prime1)
{
   prime = prime1
}

素数在哪里定义?我现在看到的唯一字段是type,它是一个int类型。

您在这里展示的源代码中没有任何错误,这将导致您提到的错误。在复制粘贴代码的时候,你可能漏掉了一些东西。错误表明在函数Champion::setPrimary的声明中存在不匹配可能你应该检查它的声明是否与你的代码中的定义完全匹配,否则如果你可以使用codepad并发布你的代码样本,实际上给出了一个错误,我们可以更好地帮助你。

上面的代码中有几点需要注意:
    Champion::setPrimary中使用的
  1. prime没有在class Champion中声明。可能因为你复制粘贴了代码,可能这部分被遗漏了。
  2. class Primary将其构造函数声明为Private,从粘贴在这里的代码中,它不确定这是故意的(没有看到您使用Singleton)或只是错误。