我有我有兩個文件,這是嚴格的定義,全局數據類型定義等等C++從頭命名的typedef夾雜找不到類型
gamedata.h
#include <utility>
#include "player.h"
namespace GameData {
enum Color {
BLACK = 0,
WHITE = 1
};
typedef typename std::pair<char, int> Position;
typedef typename std::pair< std::pair<char, int>, std::pair<char, int> > Move;
typedef typename std::pair<Player*, Player*> Players;
};
問題:
(1)播放器類中找不到 - 即使我用頭
#include <string>
#include "board.h"
#include "gamedata.h"
class Player {
public:
virtual ~Player() {}
virtual Move getMove(Board &c) = 0;
};
包括它
(2)在播放器標題中的Move getMove
功能無法解決移動
`Move` does not name a type
我最好的猜測是,這種情況正在發生,因爲它是一個圓形的包括其中兩個需要包括對方。
所以我向前gamedata.h
class Player;
namespace GameData {
enum Color {
BLACK = 0,
WHITE = 1
};
typedef typename std::pair<char, int> Position;
typedef typename std::pair< std::pair<char, int>, std::pair<char, int> > Move;
typedef typename std::pair<Player*, Player*> Players;
};
,修正了播放器問題聲明的球員,但現在的舉動仍是靠不住的。
// None work
GameData::Move
Move
代碼:
編輯1
我想改變這種:
typedef typename std::pair< std::pair<char, int>, std::pair<char, int> > Move;
到
typedef typename std::pair<Position, Position> Move;
但我認爲這是產生錯誤,所以我沒有恢復它。
不使用模板時,不要使用類型名稱。 http://stackoverflow.com/questions/7923369/when-is-the-typename-keyword-necessary –
注意到謝謝。 – user2997491
你應該使用包括守衛。 #ifndef PLAYER_H然後#define PLAYER_H – TheDude