C++ C++;其他类无法识别的类属性(包括公共标题)

C++ C++;其他类无法识别的类属性(包括公共标题),c++,class,header-files,C++,Class,Header Files,我在头文件中有两个类,分别称为“Map”和“Character”。“Map”有一个称为“Map”的类,“Character”有一个称为“Character”的类。 类“map”继承类“character”,并且都包含另一个的头文件。 在类“map”的一个方法中,我使用了类“character”中的属性成员,这很好。但是,当我尝试在类“character”中使用“map”属性成员时,它不起作用。无论“映射”是否继承“角色”,都会发生这种情况 这是一个工作正常的类映射: #pragma once #

我在头文件中有两个类,分别称为“Map”和“Character”。“Map”有一个称为“Map”的类,“Character”有一个称为“Character”的类。 类“map”继承类“character”,并且都包含另一个的头文件。 在类“map”的一个方法中,我使用了类“character”中的属性成员,这很好。但是,当我尝试在类“character”中使用“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";
     }
}
#pragma一次
#包括
#包括“Character.h”
#包括“AI.h”
使用名称空间std;
类映射:公共字符
{
公众:
静态常量int mapRow=30;//--所有贴图大小相同
静态常量int mapColumn=116;
char marr[mapRow][mapColumn];
地图()
{

对于(int i=0;i
Map.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 { ... };
    }