2017-07-09 132 views
-1

我正在为战舰游戏创建一个10x10网格。我正在使用2D数组的矢量模板,并且在初始化时遇到了麻烦。当我初始化2D矢量时,我试图将10x10矢量的每个空间设置为' ',但出于某种原因,我将每个坐标初始化为10个空格而不是1个空格。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

好吧,我试图初始化向量每个坐标有一个空间。但是,当我引用坐标[0] [0]等矢量中的坐标时,它不仅包含一个字符“',而是包含10个”字符 – ChillyPenguin672

+0

Oooh。那么,我[无法重现](http://coliru.stacked-crooked.com/a/ed46ead6639d5c88)。请创建一个[mcve]。 – Rakete1111

回答

0

您的载体是完全没问题,唯一的问题是,当你打印一个元素。

您的代码具有未定义的行为,因为您正在打印一个非空终止的char数组。 std::cout对于char*operator<<的过载,即字符串,并且发生过载。您需要解除引用才能打印出实际的字符。

为什么你甚至使用指针?如果你在外面的人必须能够修改它,只需使用参考。

+0

感谢您的关注,我对指针相对较新,所以我使用这样的项目来帮助我更好地学习它。我以前曾经使用过2D矢量,并且效果很好,但是这次可能会重建它,并且出现无法预料的错误。谢谢您的帮助。 – ChillyPenguin672