2017-02-10 61 views
0

我在頭文件中有兩個類,分別稱爲「Map」和「Character」。 「地圖」有一個叫做「地圖」的類,「角色」有一個叫做「角色」的類。 類「map」繼承類「字符」,並且都包含另一個的頭文件。 在類「地圖」的方法之一,我使用類「字符」的屬性成員,並且工作正常。但是,當我嘗試在類「字符」中使用「地圖」屬性成員時,它不起作用。無論「地圖」是否繼承「角色」,都會發生這種情況。未被其他類識別的C++類屬性(包含頭部,公共)

這是類映射的正常工作:

#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':不是類或名稱空間名稱
  • '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; 
        } 
        } 
    
+1

'使用命名空間std;'之後'類地圖:公共character'僅僅是一個壞主意。 –

+0

我似乎仍然有錯誤,當我把它拿出 – Nuthead

+0

僅供參考,在函數簽名參數上刪除void關鍵字,這是沒有必要的C++ –

回答

2

Map.h被包括Character.h,反之亦然,但不工作(這將創造無限的包容遞歸如果不是爲#pragma once)。

由於character不能依賴於map(因爲map是派生類從character)時,它不應該包括Map.h

1

我的建議,以改善你的代碼庫:

  1. 刪除using namespace std;
  2. map已經是std命名空間中的一個類。最好使用不同的名稱或在自己的名稱空間下使用它。

namespace MyApp 
{ 
    class character { ... }; 
} 

namespace MyApp 
{ 
    class map : public character { ... }; 
}