C++ C++;其他类无法识别的类属性(包括公共标题)
我在头文件中有两个类,分别称为“Map”和“Character”。“Map”有一个称为“Map”的类,“Character”有一个称为“Character”的类。 类“map”继承类“character”,并且都包含另一个的头文件。 在类“map”的一个方法中,我使用了类“character”中的属性成员,这很好。但是,当我尝试在类“character”中使用“map”属性成员时,它不起作用。无论“映射”是否继承“角色”,都会发生这种情况 这是一个工作正常的类映射:C++ C++;其他类无法识别的类属性(包括公共标题),c++,class,header-files,C++,Class,Header Files,我在头文件中有两个类,分别称为“Map”和“Character”。“Map”有一个称为“Map”的类,“Character”有一个称为“Character”的类。 类“map”继承类“character”,并且都包含另一个的头文件。 在类“map”的一个方法中,我使用了类“character”中的属性成员,这很好。但是,当我尝试在类“character”中使用“map”属性成员时,它不起作用。无论“映射”是否继承“角色”,都会发生这种情况 这是一个工作正常的类映射: #pragma once #
#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";
}
}
#pragma一次
#包括
#包括“Character.h”
#包括“AI.h”
使用名称空间std;
类映射:公共字符
{
公众:
静态常量int mapRow=30;//--所有贴图大小相同
静态常量int mapColumn=116;
char marr[mapRow][mapColumn];
地图()
{
对于(int i=0;iMap.h
包含Character.h
,反之亦然,但这不起作用(如果不是#pragma once
,它将创建无限包含递归)
由于character
不能依赖于map
(因为map
是character
的派生类),所以它不应该包括map.h
map.h
包括character.h
,反之亦然,但这不起作用(如果没有#pragma once
,它将创建无限包含递归)
由于character
不能依赖于map
(因为map
是character
的派生类),因此它不应包括map.h
我对改进代码库的建议:
使用命名空间std;
删除
map
已经是std
命名空间中的一个类。最好使用其他名称或在自己的命名空间下使用它
我对改进代码库的建议:
使用命名空间std;
删除
map
已经是std
命名空间中的一个类。最好使用其他名称或在自己的命名空间下使用它
使用namespace std;
然后使用类映射:public character
是一个坏主意。当我把它去掉时,我似乎仍然有错误,在函数签名的参数上删除void关键字,这在C++中是不必要的,我知道,但我喜欢这个习惯,因为它让我知道我没有忘记键入任何东西,只是个人的使用namespace std;
然后使用类映射:public character
是一个坏主意。当我把它取出来时,我似乎仍然有错误,在函数签名的参数上删除void关键字,这在C++中是不必要的,我知道,但我喜欢这个习惯,因为它让我知道我没有忘记键入任何东西,只是一个字符自恋的事
#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;
}
}
namespace MyApp
{
class character { ... };
}
namespace MyApp
{
class map : public character { ... };
}