我正在尝试使用 OOP 制作 Tic-Tac-Toe 游戏,但我遇到了问题。当尝试制作一个总共有 9 个正方形的棋盘并且它们都是空的作为 vector 时,我执行以下操作。
主要
#include "stdafx.h"
#include <vector>
int main()
{
char empty = ' '; //Empty square on playing board
const int numbOfSquares = 9; //Total amount of squares on board
std::vector<char> board(numbOfSquares, empty); // The playing board
return 0;
}
在我的董事会类(class)中,我尝试做同样的事情,但它的工作方式不同。
Board.h
#pragma once
#include <vector>
class Board
{
private:
const char empty = ' '; //Empty square on game board
const int numbOfSquares = 9; //Number of squares on the board
std::vector<char> board(numbOfSquares, empty); //The playing board
public:
};
说“numbOfSquares”和“empty”不是类型名称时会发生错误。我想我理解这个错误消息,但我不确定如何解决它。我可以 - 重载,这个术语是 - 成员函数中的 board 变量吗?
我完全不知道该怎么做,希望得到一些帮助。感谢您的时间。
最佳答案
std::vector<char> board(numbOfSquares, empty);
在指定您的类(class)成员的列表时不允许。相反,您应该使用构造函数初始化列表:
Board(): board(numbOfSquares, empty)
{
}
所有成员都可以这样初始化。例如,您的线路 const int numbOfSquares = 9;
是写作的捷径:
Board(): numbOfSquares(9)
{
}
但是,对于需要在括号中提供构造函数参数的情况,没有这样的捷径。
有一个快捷方式可以将构造函数参数作为花括号初始化器列表提供,但是最好避免为 vector
这样做因为 vector 更愿意将大括号的内容视为 vector 的初始值列表,而不是构造函数参数。
关于c++ - 尝试在单独的类中定义变量时遇到一些问题 - 习惯使用一个。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427125/