如何在类中使用结构
Posted
技术标签:
【中文标题】如何在类中使用结构【英文标题】:how to use struct in a class 【发布时间】:2017-04-19 14:24:42 【问题描述】:lifeform.h
class lifeform
public:
struct item;
void buyItem(item &a);
//code..
;
lifeform.cpp
struct lifeform::item
std::string type,name;
bool own;
int value,feature;
item(std::string _type,std::string _name,int _value,int _feature):type(_type), name(_name),value(_value),feature(_feature)
own=false;
;
lifeform::item lBoots("boots","Leather Boots",70,20);
void lifeform::buyItem(item &a)
if(a.own==0)
inventory.push_back(a);
a.own=1;
addGold(-a.value);
std::cout << "Added " << a.name << " to the inventory.";
if(a.type=="boots")
hp-=inventory[1].feature;
inventory[1]=a;
std::cout << " ( HP + " << a.feature << " )\n";
maxHp+=a.feature;
hp+=a.feature;
到目前为止没有错误,但是当我想像这样在 main.cpp 中使用它们时
#include "lifeform.h"
int main()
lifeform p;
p.buyItem(lBoots);
编译器说我 [错误] 'lBoots' 没有在这个范围内声明,但我声明它类我错过了什么吗?
【问题讨论】:
分享一下IGauntlets
是什么可能是相关的。
我没有看到lGauntlets
的任何定义。你的意思是lBoots
?您需要声明在头文件中,否则其他translation unit不会知道。
@RedPotato 请记住,struct
和 class
在 C++ 中确实是同一回事。唯一的区别是结构默认访问级别是公共的,所以继承和成员默认是公共的,而类默认级别是私有的。除此之外,没有任何区别。
@Someprogrammerdude 是的,是的,它的 lBoots
【参考方案1】:
要使用您的lifeform::item lBoots
,您需要在 main 中声明它:
#include "lifeform.h"
extern lifeform::item lBoots; // <-- you need this.
int main()
lifeform p;
p.buyItem(lBoots);
或者您应该将extern lifeform::item lBoots;
放在您的lifeform.h
中。
【讨论】:
op 的问题不是lifeform::item
是一个不完整的类型,而是将lBoots
作为外部变量暴露在他的头中。
@GuillaumeRacicot lifeform::item 没有问题,问题是我在 class.cpp 中声明了lBoots
但不能在 main.cpp
@GuillaumeRacicot 是的,我现在看到了,我认为问题已被编辑。
@RedPotato 我更新了答案,您需要在 main.cpp 中声明 lBoots
才能引用它。
@Pavel extern lifeform::item lBoots
的声明属于lifeform.h
。编辑它,赞成票是你的。以上是关于如何在类中使用结构的主要内容,如果未能解决你的问题,请参考以下文章