c++ - 指针和不完整的类类型
问题描述
我有一些 cpp 文件和标题。问题是当我尝试做这样的事情时:
字符.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;
}
};
字符.h
class Character;
项目.h
class 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
解决方案
将类定义移动到 cpp 文件可以看到它们的标题中。现在所有的 cpp 文件都可以看到前向声明,这足以让他们知道类的存在,而不是他们里面有什么。
字符.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;
}
字符.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 中使用前向声明并将 item.h 完整包含在 character.cpp 中是有必要的。可能会稍微加快构建时间。这是一个中级问题,您应该稍后在更熟悉 C++ 语言时探讨;现在尽量保持简单。
项目.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。
推荐阅读
- postgresql - 在 postgresql 中使用定义的起始基础按季度间隔(或任何时间间隔)对数据进行分组
- javascript - “删除”不支持弹簧启动
- wordpress - Woocommerce - 目录添加到购物车按钮 - 更改特定类别的默认数量
- postgresql - sql 触发器 - 更新/插入
- python - 使用属性装饰器给两个字典起别名——属性可以下标吗?
- laravel - 中继器中的中继器导致重新排序后数据丢失
- c++ - 为什么vector的方法resize会创建一个额外的对象?
- swift - “类声明中的预期标识符”错误
- javascript - 如何使用正则表达式在 Javascript 中验证日期?
- r - 使用 R 数据框中的条件进行计数