2D矢量初始化:初始化设置奇怪的长度

时间:2017-07-09 18:48:41

标签: c++ vector

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

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;
    }
}

1 个答案:

答案 0 :(得分:0)

你的矢量完全没问题,唯一的问题是当你打印一个元素时。

您的代码具有未定义的行为,因为您正在打印一个非空终止的char数组。 std::cout operator<<的{​​{1}}重载,即字符串,并且会超载。您需要取消引用它以打印出实际角色。

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

相关问题