我有以下代码:
struct Foo
{
struct Bar
{
std::uint32_t x = -1;
constexpr Bar(std::uint32_t x) : x(x) {}
};
static constexpr Bar CONST_BAR = Bar(0);
};
当我尝试编译它时,出现以下错误:
错误:在常量中调用了“ constexpr Foo :: Bar :: Bar(uint32_t)” 定义未完成之前的表达式
有人可以向我解释发生了什么吗?据我所知,Bar的构造函数是在第一个调用之前定义的。
答案 0 :(得分:0)
我没有详细的解释,但是我碰巧也碰到了这个问题,并认为至少值得一提...除了将CONST_BAR
的定义放在结构{{1之外] }},另一种可能的解决方法是实例化Foo
:
Foo
答案 1 :(得分:0)
您可能想尝试这样初始化-
static constexpr Foo::Bar CONST_BAR = Foo::Bar(0);
在 struct Foo 之外,因为 struct foo 的声明必须完成。