【问题标题】:Nested Structs and accessing data in C++嵌套结构和访问 C++ 中的数据
【发布时间】:2012-03-10 07:47:55
【问题描述】:

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

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

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

#ifndef EQUIP_H
#define EQUIP_H
#include <vector>
#include <string>

using namespace std;

struct Equipment{
    Equipment();
    struct Helmet{
    Helmet(){
        const char* tmp[] = {"Wooden Helmet","1",""};
        vector<string> woodHelm (tmp,tmp+3);
        const char* tmp1[] = {"Iron Helmet","2",""};
        vector<string> ironHelm (tmp1,tmp1+3);
        const char* tmp2[] = {"Steel Helmet","3",""};
        vector<string> steelHelm (tmp2,tmp2+3);
        const char* tmp3[] = {"Riginium Helmet","5","str"};
        vector<string> rigHelm (tmp3,tmp3+3);
    }
    };
    struct Shield{
    Shield(){
        vector<string> woodShield ();
        vector<string> ironShield ();
        vector<string> steelShield ();
        vector<string> rigShield ();
    }
    };
    struct Wep{
    Wep(){
        vector<string> woodSword ();
        vector<string> ironSword ();
        vector<string> steelSword ();
        vector<string> rigSword ();
    }
    };
    struct Body{
    Body(){
        vector<string> woodBody ();
        vector<string> ironBody ();
        vector<string> steelBody ();
        vector<string> rigBody ();
    }
    };
    struct Legs{
    Legs(){
        vector<string> woodLegs ();
        vector<string> ironLegs ();
        vector<string> steelLegs ();
        vector<string> rigLegs ();
    }
    };
    struct Feet{
    Feet(){
        vector<string> leatherBoots ();
        vector<string> ironBoots ();
        vector<string> steelBoots ();
        vector<string> steelToeBoots ();
        vector<string> rigBoots ();
    }
    };
};


#endif

设备.cpp:

#include <iostream>
#include "Equipment.h"

using namespace std;

Equipment::Equipment(){
    Helmet helm;
    Shield shield;
    Wep wep;
    Body body;
    Legs legs;
    Feet feet;
}

和 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);
}

【问题讨论】:

    标签: c++ struct compiler-errors


    【解决方案1】:

    好吧,我不建议像这样嵌套结构——将每个结构放在父级。为什么不使用“类”?但是,你正在做的事情是可能的。以下代码可能会让您朝着正确的方向前进:

    #include <iostream>
    
    struct A {
        struct B {
            int c;
            B() {
                c = 1;
            }
        };
    
        B b;
    };
    
    
    int main() {
        A a;
    
        std::cout << a.b.c;
    }
    

    【讨论】:

    • 谢谢。这就说得通了。它的代码比我想要的多一点,但它可以工作。
    【解决方案2】:

    因为您的 Equipment 结构中没有名为 helm 的成员。您的构造函数中只有一个局部变量 helm,但是一旦构造函数退出,该变量就不存在了。

    你可能想要添加这样的东西

    struct Equipment {
        struct Helmet {
            ...
        };
        Helmet helm;    /// this is the line you are missing
        struct Shield {
            ...
        };
        ...
    };
    

    【讨论】:

    • 感谢您使用我使用的结构名称的示例。这一点,再加上@Jameson 给了我的帮助,真的帮了我大忙。
    • 不客气。如果答案对您有帮助,请使用答案左上角大数字上方的向上箭头投票。
    • 我希望可以,但它说我需要 15 声望才能做到这一点:/
    猜你喜欢
    • 2023-03-17
    • 2021-09-26
    • 2017-02-19
    • 1970-01-01
    • 2021-09-15
    • 2021-05-21
    • 2018-05-05
    相关资源
    最近更新 更多