在尝试使用另一个类(和2个内部类)创建类时遇到问题,我认为这可能是语法问题。
第一堂课
class listitem
{
//listitem.h(11)
public:
//MONSTER CLASS
static class monster
{
public:
monster(string thename);
monster(void);
~monster(void);
private:
string name;
int level;
};
//PLAYER CLASS
static class player
{
public:
player(string _pname, int _plevel, int _maxhp, int _currhp);
player(void);
~player(void);
private:
string pname;
int plevel;
int maxhp;
int currhp;
};
public:
listitem(player member, monster head);
~listitem(void);
private:
player a;
monster b;
//other fields
};
第二节课是我遇到问题的地方:
class hatelist
{
private:
vector<listitem> thelist;
public:
hatelist(listitem newlist);
int addNewListItem(listitem item);
hatelist(void);
~hatelist(void);
};
违规代码的实施:
hatelist::hatelist(listitem inputlist)
{ //hatelist.cpp(6)
thelist.push_back(inputlist);
}
1>hatelist.cpp 1>c:\...\listitem.h(11) : error C2011: 'listitem' : 'class' type redefinition 1>c:\...\listitem.h(11) : see declaration of 'listitem' 1>c:\...\hatelist.cpp(6) : error C2027: use of undefined type 'listitem' 1>c:\...\listitem.h(11) : see declaration of 'listitem' 1>c:\...\hatelist.cpp(6) : error C2227: left of '->{dtor}' must point to class/struct/union/generic type
任何帮助都将不胜感激。
答案 0 :(得分:4)
您是否使用
保护标题?#ifndef LISTITEM_H
#define LISTITEM_H
// All of your code
#endif
如果没有,可能会被包含两次,导致您的错误。
答案 1 :(得分:4)
C ++没有“静态类”的概念。结构:
static class A { ... } a;
允许- 对象'a'是静态的。但用法如下:
static class A { ... };
应该是语法错误。
此外,但与您的问题无关,请说:
monster(void);
是unidiomatic C ++ - 通常首选的习惯用法是省略'void'(两者在语义上是相同的):
monster();
答案 2 :(得分:1)
您无法将static
应用于类,删除它,我也看不到任何其他语法错误。确保在所有标题中使用include guard。
答案 3 :(得分:1)
您粘贴的代码很难完成,因为它似乎不是整个文件。根据错误消息,听起来你忘了“保护”你的头文件:
#ifndef __MYHEADER_H_
#define __MYHEADER_H_
// header code goes here
#endif
当然要确保在.cpp文件中包含标题。
答案 4 :(得分:0)
我猜你在listitem.h中没有include guards并且你多次包含该文件。
包含防护允许您多次包含文件而不会出现问题。第一次包含该文件时,您将获得实际的定义/声明。之后,包含文件'变成空白'。