微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组绑定不是 ']' 标记之前的整数常量

如何解决数组绑定不是 ']' 标记之前的整数常量

主要:

#include <iostream>
#include "common.h"
#include "squares.h"
#include "board.h"
using namespace std;
int Board::board_length=8;
int main()
{
    Board *tabla=new Board();
    tabla->printBoard();
}

board.h :

#ifndef BOARD_H
#define BOARD_H
#include "squares.h"

class Board
{
   static int board_length;
   Square boardSquares[board_length][board_length];
   public:
   Board();
   void printBoard();

};

board.h 中的第 8 行错误 C:\c++ projects\CHESS-P3\board.h|8|错误:数组绑定不是']'标记前的整数常量|

解决方法

如错误消息所示,board_length 不是常量值。要解决此问题,请更改行

static int board_length;

board.h

static const int board_length = 8;

并删除该行

int Board::board_length=8;

来自您的主文件。这应该编译,但我不能肯定,因为你没有提供minimal,reproducible example

奖励:为了避免memory leak,您还应该更改

Board *tabla=new Board();
tabla->printBoard();

主要是为了

Board tabla;
tabla.printBoard();

由于您似乎没有传递 Board 实例,因此无需在此处使用指针。

作为一般经验法则:只要某处有 new,也需要有相应的 delete。否则你的程序可能会泄漏内存。虽然这对于一个运行时间短的小型示例程序来说没什么大不了的,但对于一个长时间运行的程序来说,这可能会成为一个严重的问题。

,

这是一个很好的 int 模板用例:

board.h

template<int _board_length>
class Board
{
   static const int board_length = _board_length;
   int boardSquares[_board_length][_board_length];
   public:
   Board(){};
   void printBoard(){};

};

main.cpp

...
constexpr int BL=8;

//odr declare the static member if it matters
template<>
const int Board<BL>::board_length;


int main() {
    Board<BL> tabla;
    tabla.printBoard();
}

这样,数组的实际尺寸是在 main 中定义的,而不是在声明类的包含文件中定义的,Board 中的所有方法都可以知道实际尺寸。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。