我有一些cpp文件和它们的头。问题是当我尝试做这样的事情时:
character.cpp
#include "item.h"
class Character {
public:
// variables such as health etc //
void equip(Item *i){
equipment.push_back(i);
this->attc += i->attc;
this->health += i->health;
this->luck += i->luck;
this->mana += i->mana;
i->equipped = true;
}
};
character.h
class Character;
item.h
class Item;
item.cpp
#include "item.h"
class Item {
public:
bool equipped;
string desc;
int attc;
int health;
int mana;
bool twoHanded;
int luck;
};
预期可以工作,但可以得到:
不允许指向不完整的类类型的指针
…在i->something
行中。
我真的不知道为什么它不起作用:c
答案 0 :(得分:2)
将类定义移动到cpp文件可以查看它们的标题中。现在,所有cpp文件都可以看到forward declaration,这足以让他们知道该类存在,而不是它们中的内容。
character.cpp
#include "character.h" // changed from item.h
// body of equip function moved here.
void Character::equip(Item *i){
^^^^^^^^^^^ note scope resolution
equipment.push_back(i);
this->attc += i->attc;
this->health += i->health;
this->luck += i->luck;
this->mana += i->mana;
i->equipped = true;
}
character.h
#include "item.h" // added. Easiest way to get knowledge of Item into character.h
// and character.cpp
class Character {
public:
// variables such as health etc //
void equip(Item *i);
};
有时需要在character.h中使用前向声明,并在character.cpp中完整包含item.h。可能会稍微加快构建时间。这是一个中级问题,您应该在以后更熟悉C ++语言时再进行探讨。现在尝试使事情保持简单。
item.h
#include "item.h"
class Item {
public:
bool equipped;
string desc;
int attc;
int health;
int mana;
bool twoHanded;
int luck;
};
将所有内容从Item.cpp移动到Item.h。当前不需要Item.cpp。