我的项目在编译时出现以下错误。尝试了所有方法但无法解决此问题。
错误:constexpr 变量 'noOfTiles' 必须由常量表达式初始化
static constexpr int noOfTiles = Board::getTotalNoOfTiles();
# pragma once
# include "Tile.h"
class Board {
private:
Board();
static constexpr int TOTAL_NUMBER_OF_TILES = 1;
Tile* board[TOTAL_NUMBER_OF_TILES];
public:
static constexpr int getTotalNoOfTiles();
};
# include "Board.h"
Board::Board() : board{
new Tile()
} {
}
constexpr int Board::getTotalNoOfTiles() {
return TOTAL_NUMBER_OF_TILES;
}
# pragma once
# include "Board.h"
class TitleDeed;
class Player {
private:
static constexpr int noOfTiles = Board::getTotalNoOfTiles(); // this line produces the error
TitleDeed* propertiesOwned[noOfTiles];
};
不是
Board::getTotalNoOfTiles()
常量表达式,因为它只是返回常量静态变量 TOTAL_NUMBER_OF_TILES
。这不是编译时常量吗?
constexpr
本身是不够的。编译器需要能够在编译时获取该值,因此 getTotalNoOfTiles
的定义需要位于您的 .h 文件中。当然是内联的。