你能用类型数据成员构建一个结构吗?
我有一个类文件,我的目标是构建一个链接的字符,每个字符都有自己的名字和其他属性。
现在要构建列表我需要一个将保存数据和节点指针的成员 我的问题是我可以建立这样的东西。所有这些都是在一个类文件中完成的,每当我运行它时,我在结构中出错,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
答案 0 :(得分: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;
};
答案 1 :(得分:0)
我怀疑问题是C ++编译器在进入结构定义时还没有看到BigHero类,所以它不知道如何处理它。
通过以下方式向前声明BigHero类:
class BigHero;
在Node结构之前。