链接列表,类结构?

时间:2016-04-15 21:44:28

标签: c++ class linked-list

你能用类型数据成员构建一个结构吗?

我有一个类文件,我的目标是构建一个链接的字符,每个字符都有自己的名字和其他属性。

现在要构建列表我需要一个将保存数据和节点指针的成员 我的问题是我可以建立这样的东西。所有这些都是在一个类文件中完成的,每当我运行它时,我在结构中出错,BigHero没有命名类型。

帮助这个菜鸟XD

 #include <string>
 #include <iostream>

 using namespace std;

 #ifndef BIGHERO_H
 #define BIGHERO_H

struct Node{
    BigHero data;
    Node* Next;
    };

class BigHero
{
 public:

     BigHero();

     /* Parameterized constructor
      * Set private members to parameter values
      * NOTE:  level is initialized as the interger division of exp/100
      *        i.e. if exp = 250 -> level = 2       */
       BigHero(string newName, int newExp, int newStr, int newIntel, int            newDex);

        /* Accessors:  each accessor will return the value of the appropriate 
        private data member */
        string getName() const;
        int getExp() const;
        int getStr() const;
        int getInt() const;
        int getDex() const;
        int getLevel() const;

        /* Mutators:  each mutator will take one parameter and update the    

         appropriate private data member 
        * The domain for each mutator is listed below.  
        * The mutator should protect against invalid values.  
        * An Invalid entry should result in the original value remaining unchanged. */
         void setName( string newName );   // All strings are valid
         void setExp( int newExp );        // 0 <= newExp <= 9000
         void setStr( int newStr );        // 0 <= newStr <= 300
         void setInt( int newInt );        // 0 <= newInt <= 300
         void setDex( int newDex );        // 0 <= newDex <= 300
         void setLevel( int newLevel );    // 1 <= newLevel <= 100


         bool addExp( int amount );


         void levelUp();

        bool operator<( const BigHero& rhs ) const;
        bool operator>( const BigHero& rhs ) const;
        bool operator==( const BigHero& rhs ) const;


       friend ostream& operator<< (ostream& os, const BigHero& rhs);

     /* Input should be in the format: "Name exp Str Intel Dex" 
     * Don't forget to update level value to be equal to the integer division of exp/100 */
       friend istream& operator>> (istream& is, BigHero& rhs);

     ~BigHero();

     private:
         string name;    // Hero's name
         int exp;        // Experience points (100 exp = 1 level)
         int level;      // Hero's level
         int Str;        // Hero's strength
         int Intel;      // Hero's intelligence
         int Dex;        // Hero's dexterity

         Node* head;
         Node* tail;


        };

        #endif // BIGHERO_H

2 个答案:

答案 0 :(得分:1)

Node包含BigHero,因此要分配NodeNode需要知道BigHero的大小才能确定存储空间是必须的。这意味着BigHero必须完全定义,且大小已知,才能定义Node

class BigHero
{
     // Rest of BigHero omitted to save space
     Node* head;
     Node* tail;
};

struct Node{
    BigHero data;
    Node* Next;
};

但是...

BigHero需要知道Node的概念存在,并且将在别处定义,以便能够包含指向Node的指针。这是通过Node的前向定义来解决的。所以

struct Node;
class BigHero
{
     // Rest of BigHero omitted to save space
     Node* head;
     Node* tail;
};

struct Node{
    BigHero data;
    Node* Next;
};

答案 1 :(得分:0)

我怀疑问题是C ++编译器在进入结构定义时还没有看到BigHero类,所以它不知道如何处理它。

通过以下方式向前声明BigHero类:

class BigHero;

在Node结构之前。