gpt4 book ai didi

c++ - 初学者 C++ - 在头文件中使用全局常量时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:10:24 27 4
gpt4 key购买 nike

又一个拼字游戏项目问题...这是一个简单的问题。

我似乎无法识别我的全局常量:

我的board.h: http://pastebin.com/7a5Uyvb8

返回的错误:

1>C:\Users\Francisco\Documents\FEUP\1A2S\PROG\projecto3\projecto3\Board.h(34): error:     variable "TOTAL_ROWS" is not a type name
1> vector< vector<Cell> > _matrix(TOTAL_ROWS , vector<Cell>(TOTAL_COLUMNS));
1>
1>main.cpp
1>compilation aborted for .\Game.cpp (code 2)
1>Board.cpp
1>.\Board.h(34): error: variable "TOTAL_ROWS" is not a type name
1> vector< vector<Cell> > _matrix(TOTAL_ROWS , vector<Cell>(TOTAL_COLUMNS));
1> ^
1>

为什么会这样?为什么编译器需要类型?

感谢您的宝贵时间!

编辑:

忽略我之前的编辑...这是我的默认构造函数: 董事会::董事会() { _matrix(TOTAL_ROWS, vector (TOTAL_COLUMNS));

我收到以下错误。

1>.\Board.cpp(16): error: call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type
1> _matrix(TOTAL_ROWS, vector<Cell>(TOTAL_COLUMNS));
1> ^

为什么会这样?


我设法解决了我文件中的所有问题。我用过

Board::Board() :
_matrix(TOTAL_ROWS, vector<Cell>(TOTAL_COLUMNS))
{}

相反。感谢您的帮助!

最佳答案

按照编写方式,您正在定义一个名为 _matrix 的函数,该函数返回一个 vector 。所以 TOTAL_ROWS 应该是一个类型名称,因为它被解析为参数类型。我假设您要做的是定义一个名为 _matrix 的变量, 一个 vector 。

您要做的是放弃构造函数,并在构造函数中初始化变量。在类的主体中只能初始化常量整数值,至少在当前版本的标准中是这样。

省略不重要的部分:

  Board() : _matrix(TOTAL_ROWS, vector<Cell>(TOTAL_COLUMNS)) { }

private:
vector< vector<Cell> > _matrix;

请注意,这只是一个示例。假设您有一个带有 Board() 实际主体的实现文件,您应该将初始化放在那里而不是直接放在 header 中,否则您会出错。重要的是,当您最初声明 _matrix 时,您不应该这样做。


对于您的新问题,extern const unsigned int TOTAL_COLUMNS = 15; 定义 TOTAL_COLUMNS 每次文件包含 Board.h。默认情况下,命名空间范围内的常量变量具有内部链接,因此如果您不使用 extern 就可以了。

一般来说,如果变量不是常量,您可以采用类似于 _matrix 的方法。您在 header 中取消初始化,然后在实现文件中将其放回原处:

板.h: extern const int TOTAL_COLUMNS;

板.cpp: extern const int TOTAL_COLUMNS = 15;

关于c++ - 初学者 C++ - 在头文件中使用全局常量时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813190/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com