2016-04-15 3 views
-1

Можете ли вы построить структуру с элементом данных типа класса?Связанный список, Class struct?

У меня есть файл класса, и моя цель - построить связанные линии символов, каждый со своими именами и другими атрибутами.

сейчас, чтобы построить список Мне нужен член, который будет хранить данные и указатель на узел Мой вопрос: могу ли я построить что-то вроде этого. все это делается в файле класса, и всякий раз, когда я запускаю его, я получаю сообщение об ошибке в структуре, 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 
+1

#include ? – Pooya

+0

Эта структура находится в файле класса – William

+0

скомпилированный файл класса? – Pooya

ответ

1

Node содержит BigHero, поэтому выделить Node, Node должен знать размер 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; 
}; 
+0

XD u мужчина ... это сработало !!!!! ... может ли ваш компьютер всегда быть вирусом – William

+0

@William _ "u the man" _ Что вы уверены, что это мужчина-мужчина? Я не вижу никаких доказательств из их профиля. –

0

Я подозреваю, проблема в том, что C++ компилятор не видел класс BigHero еще, когда он попадает в определении структуры, поэтому он не знает, что делать с Это.

Прогнозные объявить класс BigHero, помещая это:

class BigHero; 

До узла структуры.

+1

Неправильно; он использует BigHero как значение в узле, но использует только Node в качестве указателя в BigHero. – kfsone

+0

Разве это не значит, что ему нужна форвардная декларация BigHero до определения узла? – GaiusOctavian

+0

Значит, ему нужно переместить определение 'node' после' BigHero' и форвард определить 'Node' перед' BigHero'. – user4581301

Смежные вопросы