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

时间:2017-02-10 20:50:24

标签: c++ class header-files

我在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; map&#39;:不是类或命名空间名称
  • &#39; map&#39;:不是类或命名空间名称
  • &#39; mapColumn&#39;:未声明的标识符
  • &#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;
        }
      }
    

2 个答案:

答案 0 :(得分:2)

Map.h包含Character.h,反之亦然,但这不起作用(如果#pragma once没有包含递归,则会产生无限包含递归)

由于character不能依赖map(因为map是来自character的派生类),因此不应包含Map.h

答案 1 :(得分:1)

我建议您改进代码库:

  1. 删除using namespace std;
  2. map已经是std命名空间中的一个类。最好使用不同的名称或在自己的名称空间下使用它。
  3. namespace MyApp
    {
       class character { ... };
    }
    
    namespace MyApp
    {
       class map : public character { ... };
    }