我在初级化一个空数组时遇到了一些麻烦,或者我在类中调用它。基本上我想用0填充二维数组。
这是我的代码:
Board.cpp
#include "Board.h"
#include <string>
#include <iostream>
#include "Player.h"
using namespace std;
Board::Board()
: _board{ { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } }
{
}
void Board::drawBoard()
{
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++){
if (i == 0 && j == 0){
cout << " ";
}
else if (i == 0){
cout << " " << j << " ";
}
else if (j == 0){
cout << i;
}
else {
if (_board[i][j] == 0)
cout << "| " << "|";
else
cout << "|" << _board[i][j] << "|";
}
}
cout << endl;
}
}
void Board::playerInput(char input)
{
}
这是Board.h:
#pragma once
#include <string>
#include <iostream>
class Board
{
public:
Board();
void drawBoard();
void playerInput(char input);
private:
char _board[3][3];
char _input;
};
是一种初始化数组的正确方法吗?我读了一些文章,但这让我更加困惑。 我很抱歉,如果我听起来很愚蠢。但我需要你的帮助。 谢谢。
答案 0 :(得分:3)
您需要做的就是 value initialize 数据成员:
Board::Board() : _board() {}
这将零初始化_board
的所有元素,也适用于C ++ 03。
答案 1 :(得分:1)
juanchopanza使用的方法是c ++ 11设置的当前方法 但是,我会建议一些小的改变。如果所有默认构造函数都在做初始化数组,我会在头文件中初始化它。喜欢这个
#pragma once
#include <string>
#include <iostream>
class Board
{
public:
Board()=default; //becomes compiler constructed
void drawBoard();
void playerInput(char input);
private:
char _board[3][3]{};//added {} here
char _input;
};
这样,在调用构造函数之前初始化数组,构造函数由编译器生成。 这里的优点是您需要的代码更少,并且如果您愿意,它可以扩展为其他构造函数。
例如:
如果你添加
Board(char输入)输入 所需要的只是:
Board(char input)
{
_input=input;// no need to repeat initialization code for _board array
}
答案 2 :(得分:0)
根据您的编译器,您应该能够这样做(注意使用括号而不是括号):
Board::Board()
: _board( { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } )
{
}
参考:https://stackoverflow.com/a/2409882/1932930
看起来您正在使用VS2013。看起来VS2013支持它。参考:http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport