其他类无法识别的 C++ 类属性(包括 header 、公共(public))

标签 c++ class header-files

<分区>

我在头文件中分别有两个类,分别称为“ map ”和“字符”。 “Map”有一个名为“map”的类,“Character”有一个名为“character”的类。 “map”类继承了“character”类,两者都包含了对方的头文件。 在“map”类的方法之一中,我使用了“character”类的一个属性成员,效果很好。但是,当我尝试在“character”类中使用“map”属性成员时,它不起作用。无论“map”是否继承“character”,都会发生这种情况。

这是工作正常的类映射:

#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";
     }
}

这是类字符,编译时会出现以下错误:

  • 'map': 不是类名或命名空间名
  • 'map': 不是类名或命名空间名
  • 'mapColumn': 未声明的标识符
  • 'mapRow': 未声明的标识符

    #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;
        }
      }
    

最佳答案

Map.h 包含 Character.h,反之亦然,但这不起作用(如果不是#pragma once).

由于character不能依赖于map(因为mapcharacter的派生类),它不应包含 Map.h

关于其他类无法识别的 C++ 类属性(包括 header 、公共(public)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42168457/

相关文章:

c++ - 使用 4 个线程获取/释放语义

C++ 不识别 .h 声明

python - PyQt5:使用类创建窗口

java - 有没有办法使用 Eclipse 列出某个类的 equals() 的所有调用?

c - -1)预处理程序,链接器,2)Header文件,库之间有什么区别?我的理解正确吗?

c - Fortran 中的模块 "header"

c++ - 在 C++ 中拆分 `char[]`

c++ - 独立的共享库

python - 在 python 中向量化嵌套 for 循环以实现依赖于索引的函数

javascript - 如何使用 jQuery 将一组类的内容分发到另一组