我在Header文件中分别有两个类叫做#34; Map"和#34;字符"。 "地图"有一个名为" map"和#34;字符"有一个名为"字符"的类。 课程"地图"继承class" character",并且都包含另一个的头文件。 在class" map"的一个方法中,我使用了类#34; character"中的属性成员,并且工作正常。但是,当我尝试使用" map"班级中的物业成员"字符"这是行不通的。无论是否" map"都会发生这种情况。继承"字符"。
这是可以正常运行的类地图:
#pragma once
#include <iostream>
#include "Character.h"
#include "AI.h"
using namespace std;
class map: public character
{
public:
static const int mapRow = 30; //-- all maps are the same size
static const int mapColumn = 116;
char marr[mapRow][mapColumn];
map()
{
for (int i = 0; i<mapRow; i++)
{
for (int j = 0; j<mapColumn; j++)
{
marr[i][j] = ' ';//set whole array to blank
}
}
}
void display(void);
void level1(void);
void level2(void);
void level3(void);
void treeBlueprint(int);
};
//displays the map
void map::display(void)
{
//This displays the level
for (int i = 0; i<mapRow; i++)
{
for (int j = 0; j<mapColumn; j++)
{
cout << marr[i][j];
}
cout << "\n";
}
}
这是类字符,在编译时会给我以下错误:
&#39; mapRow&#39;:未声明的标识符
#pragma once
#include "Map.h"
#include <iostream>
using namespace std;
class character
{
int hpPool = 100;
int currentHp =hpPool;
public:
char Tommy ='?';
int position1;
int position2;
char movement;
character()
{
position1 = 5;
position2 = 5;
movement = '0';
}
void moveUp(void);
void moveDown(void);
void moveLeft(void);
void moveRight(void);
void moveFunct(void);
};
void character::moveUp(void)
{
if (position1 != 1)
{
position1--;
}
else
{
//Hitting a wall
}
}
void character::moveDown(void)
{
if (position1 != (map::mapRow-2))
{
position1++;
}
else
{
//Hitting a wall
}
}
void character::moveLeft(void)
{
if (position2 != 1)
{
position2--;
}
else
{
//Hitting a wall
}
}
void character::moveRight(void)
{
if (position2 != (map::mapColumn-2))
{
position2++;
}
else
{
//Hitting a wall
}
}
void character::moveFunct(void)
{
switch (movement)
{
case 'w': moveUp();
break;
case 'a': moveLeft();
break;
case 's': moveDown();
break;
case 'd': moveRight();
break;
}
}
答案 0 :(得分:2)
Map.h
包含Character.h
,反之亦然,但这不起作用(如果#pragma once
没有包含递归,则会产生无限包含递归)
由于character
不能依赖map
(因为map
是来自character
的派生类),因此不应包含Map.h
。
答案 1 :(得分:1)
我建议您改进代码库:
using namespace std;
。map
已经是std
命名空间中的一个类。最好使用不同的名称或在自己的名称空间下使用它。namespace MyApp
{
class character { ... };
}
namespace MyApp
{
class map : public character { ... };
}