2017-07-09 25 views
-1

私は戦艦ゲーム用の10x10グリッドを作成しています。私は2D配列のベクトルテンプレートを使用しており、初期化するときに問題に遭遇しています。私は2Dベクトルを初期化するとき、私は' 'に10x10ベクトルの各スペースを設定しようとしていますが、何らかの理由で1つのスペースの代わりに10スペースに初期化されて各座標を取得しています。2Dベクトルの初期化:初期設定の奇妙な長さ

board.hpp

#ifndef BOARD_HPP 
#define BOARD_HPP 
#include "ship.hpp" 
#include <vector> 

class Board 
{ 
private: 
    std::vector<std::vector<char> > coordinate; 
    Ship carrier; 
    Ship battleship; 
    Ship floater; 
    Ship submarine; 
    Ship destroyer; 
public: 
    Board(); 
    char *coord(int row, int column); 
}; 

#endif // BOARD_HPP 

board.cppここ

#include "board.hpp" 

Board::Board() : coordinate(std::vector<std::vector<char> >(10, std::vector<char>(10, ' '))), carrier('C',5), battleship('B',4), floater('F',3), submarine('S',3), destroyer('D',2) 
{ 
    //Constructor 
} 
char *Board::coord(int row, int column) 
{ 
    return &coordinate[row][column]; 
} 

ゲームはボードに供給ファイルです:

game.hpp

#ifndef GAME_HPP 
#define GAME_HPP 

#include "board.hpp" 

class Game 
{ 
private: 
    Board *playerBoard; 
    Board *compBoard; 
    Board *compBoardHidden; 
public: 
    Game(Board *player_board, Board *comp_board, Board *comp_board_hidden); 
    void display(); 
}; 

#endif // GAME_HPP 

game.cpp

#include "game.hpp" 
#include <iostream> 

Game::Game(Board *player_board, Board *comp_board, Board *comp_board_hidden) : playerBoard(player_board), compBoard(comp_board), compBoardHidden(comp_board_hidden) 
{ 
    //Constructor 
} 
void Game::display() 
{ 
    std::cout << "    | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|    | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|" <<std::endl; 
    for (int i = 0; i < 10; i++) 
    { 
     std::cout << "   ---+---+---+---+---+---+---+---+---+---+---+   ---+---+---+---+---+---+---+---+---+---+---+\n   " << char(65+i) << " | " << playerBoard->coord(i,0) << " | " << playerBoard->coord(i,1) << " | " << playerBoard->coord(i,2) << " | " << playerBoard->coord(i,3) << " | " << playerBoard->coord(i,4) << " | " << playerBoard->coord(i,5) << " | " << playerBoard->coord(i,6) << " | " << playerBoard->coord(i,7) << " | " << playerBoard->coord(i,8) << " | " << playerBoard->coord(i,9) << " |   " << char(65+i) << " | " << compBoard->coord(i,0) << " | " << compBoard->coord(i,1) << " | " << compBoard->coord(i,2) << " | " << compBoard->coord(i,3) << " | " << compBoard->coord(i,4) << " | " << compBoard->coord(i,5) << " | " << compBoard->coord(i,6) << " | " << compBoard->coord(i,7) << " | " << compBoard->coord(i,8) << " | " << compBoard->coord(i,9) << " |" << std::endl; 
    } 
} 
+2

あなたはベクトルを初期化するために ''''を使用しています。なぜスペースで埋められているのだろうか?あなたの問題を正しく理解していますか? – Rakete1111

+0

うーん、私は各座標ごとに1つのスペースを持つベクトルを初期化しようとしています。しかし、座標[0] [0]のような私のベクトルの座標を参照するときには、文字 ''ではなく '10' 'の文字が1つだけ含まれていません – ChillyPenguin672

+0

Oooh。まあ、私は[再現できません](http://coliru.stacked-crooked.com/a/ed46ead6639d5c88)。 [mcve]を作成してください。 – Rakete1111

答えて

0

あなたのベクトルを使用すると、単一の要素を印刷するときにのみ問題があり、完全に罰金です。

null終端されていないchar配列を出力するため、コードの動作が未定義です。 std::coutchar*のためのoperator<<の過負荷、すなわち文字列を持ち、その過負荷がとられます。実際の文字を印刷するには、逆参照する必要があります。

なぜポインタを使用していますか?外部の誰かがそれを変更できなければならない場合は、単に参照を使用してください。

+0

それを見ていただきありがとうございます。私はポインタが比較的新しいので、このようないくつかのプロジェクトを使用して私がそれをより良く学ぶのを助けています。私は以前2Dベクトルを使用していましたが、正常に動作しましたが、予期しないエラーで今回は再構築した可能性があります。助けてくれてありがとう。 – ChillyPenguin672

関連する問題