c++ - 尝试在单独的类中定义变量时遇到一些问题 - 习惯使用一个。

标签 c++ oop console-application

我正在尝试使用 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/

相关文章:

c++ - 当我将一组命令移到一个单独的函数中时出现代码段错误

c# - 将控制台应用程序编译为 32 位

java - 控制台应用程序中的类实例

c++ - 通过引用函数来传递新构造的对象是否合法?

c++ - TinyXML2 和 C++

java - 关于数据建模的非常基本的问题

c++ - OOP C++ 第一个编译器错误

c# - 将来自控制台的用户输入解析为 C# 中的命令行参数

c++ - 无法使用 OpenSSL 1.1.1 从 ClientHello 检索服务器名称 (SNI)

perl - 在对象实例上调用 new 有什么好处?