C++ 嵌套结构和访问C+中的数据+;

C++ 嵌套结构和访问C+中的数据+;,c++,struct,compiler-errors,C++,Struct,Compiler Errors,好的,我正在尝试制作一个简单的游戏。我有一个名为Equipment的结构,其中每个部分都有结构,例如头盔、身体等。在设备的构造函数中,我让它生成子结构的对象,在子结构构造函数中,我让它们初始化字符串向量 所以我的问题是,在我的主函数中,我创建了一个设备对象,但是当我尝试访问例如woodHelm时,我得到了编译错误:“structEquipment”没有名为“helm”的成员。我做错了什么?还是有其他方法可以让我做得更好 这是我的设备.h(忽略其他子结构,我还没有初始化它们): \ifndef设备

好的,我正在尝试制作一个简单的游戏。我有一个名为Equipment的结构,其中每个部分都有结构,例如头盔、身体等。在设备的构造函数中,我让它生成子结构的对象,在子结构构造函数中,我让它们初始化字符串向量

所以我的问题是,在我的主函数中,我创建了一个设备对象,但是当我尝试访问例如woodHelm时,我得到了编译错误:“structEquipment”没有名为“helm”的成员。我做错了什么?还是有其他方法可以让我做得更好

这是我的设备.h(忽略其他子结构,我还没有初始化它们):

\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个声誉:/