C++ 嵌套结构和访问C+中的数据+;
好的,我正在尝试制作一个简单的游戏。我有一个名为Equipment的结构,其中每个部分都有结构,例如头盔、身体等。在设备的构造函数中,我让它生成子结构的对象,在子结构构造函数中,我让它们初始化字符串向量 所以我的问题是,在我的主函数中,我创建了一个设备对象,但是当我尝试访问例如woodHelm时,我得到了编译错误:“structEquipment”没有名为“helm”的成员。我做错了什么?还是有其他方法可以让我做得更好 这是我的设备.h(忽略其他子结构,我还没有初始化它们):C++ 嵌套结构和访问C+中的数据+;,c++,struct,compiler-errors,C++,Struct,Compiler Errors,好的,我正在尝试制作一个简单的游戏。我有一个名为Equipment的结构,其中每个部分都有结构,例如头盔、身体等。在设备的构造函数中,我让它生成子结构的对象,在子结构构造函数中,我让它们初始化字符串向量 所以我的问题是,在我的主函数中,我创建了一个设备对象,但是当我尝试访问例如woodHelm时,我得到了编译错误:“structEquipment”没有名为“helm”的成员。我做错了什么?还是有其他方法可以让我做得更好 这是我的设备.h(忽略其他子结构,我还没有初始化它们): \ifndef设备
\ifndef设备
#定义设备
#包括
#包括
使用名称空间std;
结构设备{
设备();
结构头盔{
头盔(){
const char*tmp[]={“木制头盔”、“1”、“1”);
矢量木盔(tmp,tmp+3);
const char*tmp1[]={“铁盔”、“2”、“2”);
矢量铁盔(tmp1,tmp1+3);
const char*tmp2[]={“钢盔”、“3”、“3”);
矢量钢盔(tmp2,tmp2+3);
const char*tmp3[]={“Riginium头盔”、“5”、“str”};
矢量舵(tmp3,tmp3+3);
}
};
结构屏蔽{
盾牌(){
矢量木盾();
向量铁盾();
向量钢盾();
向量rigShield();
}
};
结构Wep{
Wep(){
矢量木剑();
向量铁剑();
向量钢剑();
向量rigbrow();
}
};
结构体{
正文(){
向量体();
向量体();
向量体();
向量刚体();
}
};
结构支腿{
腿(){
向量woodLegs();
向量铁腿();
向量钢腿();
向量rigLegs();
}
};
结构脚{
脚(){
向量皮靴();
向量ironBoots();
向量钢靴();
向量steelToeBoots();
向量机();
}
};
};
#恩迪夫
设备.cpp:
#include <iostream>
#include "Equipment.h"
using namespace std;
Equipment::Equipment(){
Helmet helm;
Shield shield;
Wep wep;
Body body;
Legs legs;
Feet feet;
}
#包括
#包括“设备.h”
使用名称空间std;
设备::设备(){
头盔;
屏蔽;
Wep Wep;
身体;
腿;
脚;
}
和main.cpp:
#include <iostream>
#include "Player.h"
#include "Equipment.h"
#include "Items.h"
#include "conio.h"
using namespace std;
using namespace conio;
void init();
int main(int argc, char* argv[]){
/****INIT****/
Player p(argv[1],10,1,1);
Equipment equip;
Items items;
cout << clrscr() << gotoRowCol(3,5) << "Player Stats: (" << p.getName() << ")";
cout << gotoRowCol(4,5) << "HP: " << p.getHP() <<
gotoRowCol(5,5) << "Att: " << p.getAtt() <<
gotoRowCol(6,5) << "Def: " << p.getDef();
//this is where it is messing up
p.addHelm(equip.helm.woodHelm);
cout << gotoRowCol(20,1);
}
#包括
#包括“Player.h”
#包括“设备.h”
#包括“项目.h”
#包括“conio.h”
使用名称空间std;
使用名称空间conio;
void init();
int main(int argc,char*argv[]){
/****初始化****/
游戏者p(argv[1],10,1,1);
装备;
项目;
cout好吧,我不建议像这样嵌套结构——将每个结构都放在父级。为什么不使用“类”?但是,您所做的是可能的。下面的代码可能会为您指明正确的方向:
#include <iostream>
struct A {
struct B {
int c;
B() {
c = 1;
}
};
B b;
};
int main() {
A a;
std::cout << a.b.c;
}
#包括
结构A{
结构B{
INTC;
B(){
c=1;
}
};
B B;
};
int main(){
A A;
std::cout好吧,我不建议像这样嵌套结构——将每个结构都放在父级。为什么不使用“类”?但是,您所做的是可能的。下面的代码可能会为您指明正确的方向:
#include <iostream>
struct A {
struct B {
int c;
B() {
c = 1;
}
};
B b;
};
int main() {
A a;
std::cout << a.b.c;
}
#包括
结构A{
结构B{
INTC;
B(){
c=1;
}
};
B B;
};
int main(){
A A;
std::cout因为您的设备结构中没有名为helm的成员。您的构造函数中只有一个局部变量helm,但一旦构造函数退出,该变量就不再存在
您可能想添加这样的内容
struct Equipment {
struct Helmet {
...
};
Helmet helm; /// this is the line you are missing
struct Shield {
...
};
...
};
因为您的设备结构中没有名为helm的成员。您的构造函数中只有一个局部变量helm,但一旦构造函数退出,该变量就不再存在
您可能想添加这样的内容
struct Equipment {
struct Helmet {
...
};
Helmet helm; /// this is the line you are missing
struct Shield {
...
};
...
};
谢谢。这是有道理的。这是一个比我想要的代码多一点的代码,但它能工作。谢谢。这是有道理的。这是一个比我想要的代码多一点的代码,但它能工作。谢谢你使用我使用的结构名称的例子。这个,再加上@Jameson给了我真正的帮助。不客气。如果答案对你有帮助,p请使用答案左上角大数字上方的向上箭头为其投票。我希望我可以,但它说我需要15个声誉才能做到这一点:/感谢您使用我使用的结构名称的示例。这与@Jameson给了我很大帮助。不客气。如果答案对您有帮助,请使用向上箭头为其投票在答案左上角的大数字上方划一行。我希望我可以,但上面写着我需要15个声誉:/