Constexpr / 编译时常量表达式错误

问题描述 投票:0回答:1

我的项目在编译时出现以下错误。尝试了所有方法但无法解决此问题。

错误

错误:constexpr 变量 'noOfTiles' 必须由常量表达式初始化

static constexpr int noOfTiles = Board::getTotalNoOfTiles();

相关代码

板.h

# 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();
};

板.cpp

# include "Board.h"


Board::Board() : board{
        new Tile()
} {
}


constexpr int Board::getTotalNoOfTiles() {
    return TOTAL_NUMBER_OF_TILES;
}

玩家.h

# 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
。这不是编译时常量吗?

c++ arrays debugging compiler-errors constexpr
1个回答
0
投票

constexpr
本身是不够的。编译器需要能够在编译时获取该值,因此
getTotalNoOfTiles
的定义需要位于您的 .h 文件中。当然是内联的。

© www.soinside.com 2019 - 2024. All rights reserved.