array bound 不是']'标记之前的整数常量
array bound is not an integer constant before ']' token
主要内容:
#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();
}
这样,数组的实际尺寸是在主文件中定义的,而不是在声明class的包含文件中定义的,Board
中的所有方法都可以知道实际大小.
主要内容:
#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();
}
这样,数组的实际尺寸是在主文件中定义的,而不是在声明class的包含文件中定义的,Board
中的所有方法都可以知道实际大小.