1
私はプロジェクトのためのテキストベースのビデオゲームを作らなければなりません。私は「タイル」と呼ばれるクラスを作成し、次に「壁」というサブクラスを作成しました。私は次に、以下に示すタイルの配列を作った。センタータイル、B2は壁です。私がtypeid(B2)==typeid(wall)
を比較すると、タイルB2がタイプwallであってもfalseを返します。クラス「戦闘機」にはxとyの成分があります。なぜtypeidは常にfalseを返すのですか?
//Initiate map
const int rows = 3;
const int cols = 3;
tile A1, A2, A3, B1, B3, C1, C2, C3;
fighter wizard(1, 2, 6, ft::mage, 100);
C3 = tile(wizard, "There's all this magic stuff everywhere.");
wall B2= wall("A wall blocks your path.");
tile map[rows][cols] = {{A1, A2, A3},
{B1, B2, B3},
{C1, C2, C3}};
...
fighter player1(0, 0, 0, ft::warrior);
...
string input = "";
while(input!="quit")
{
cin >> input;
if (input == "left") {
if (typeid(map[player1.y][player1.x - 1]) == typeid(wall))
cout << map[player1.y][player1.x - 1].scene;
だから、なぜあなたは' [player1.y] [1 player1.x]マップと思いますか?私はそれが純粋なタイルだと言うでしょう(オブジェクトコピー=>スライス**のため、B2が壁であっても) – deviantfan
http://stackoverflow.com/questions/274626/what-is-object-slicing – deviantfan
@deviantfan正しい軌道上にあります。 'tile'オブジェクトの2D配列を作成していて、' wall'を配列にコピーしようとすると問題が起こります。 'Tile *'は基本クラスなので 'Tile *'型や 'Wall *'型を指し示す 'Tile *'型の配列を持つつもりであると思います。 –