Ошибка: объявление несопоставимо с «именем функции» - PullRequest
0 голосов
/ 07 апреля 2011

То, что я пытаюсь сделать, это передать объект (класс) в конструктор функции.Код в основном выглядит следующим образом:

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

Я получаю сообщение об ошибке

Ошибка: объявлениенесопоставим с 'void Champion :: setPrimary (prime) "(объявлено в champion.h)"

Я не уверен, что это значит, но я знаю, что можно передать объект класса вфункция через параметр.Что я делаю неправильно?чтобы быть немного более понятным, я хотел бы знать, что означает ошибка.и насколько я знаю все заявлено как есть.взгляните и дайте мне несколько идей о том, в чем может быть проблема, и, надеюсь, у меня нет ни одной маленькой опечатки!

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

В исходном коде, который вы здесь указали, нет ничего плохого, что приведет к указанной вами ошибке. Так что, возможно, вы что-то упустили при копировании кода здесь. Ошибка говорит о том, что в объявлении для функции Champion::setPrimary имеется несоответствие. Вероятно, вам следует проверить, точно ли ее объявление соответствует определению в вашем коде, или же вы можете использовать codepad и опубликовать образец вашего код, который на самом деле дает ошибку, мы можем помочь вам лучше.

В приведенном выше коде есть несколько моментов, на которые следует обратить внимание:

  1. prime, используемый внутри Champion::setPrimary, не объявлен внутри class Champion. Возможно, так как вы скопировали и вставили код, возможно, этот раздел пропущен.
  2. class Primary объявляет свой конструктор как Private, из вставленного здесь кода он не уверен, что он является преднамеренным (не вижу, что вы используете Singleton) или просто ошибочным.
0 голосов
/ 07 апреля 2011

Тупой вопрос, а все ли это в одном файле? Если нет, то есть ли в champion.cpp (или как он там называется) ссылка на класс Primary через #include "primary.h"?

EDIT:

Хорошо, то, что вы показали, компилируется, если я сделаю быструю реконструкцию. Я сразу вижу одну вещь в последнем фрагменте кода, который у вас есть:

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

Где определяется простое число ? Единственное поле, которое я вижу сейчас, это тип, который является целым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...