【发布时间】:2020-12-10 22:48:22
【问题描述】:
我不太明白为什么这段代码不能在 Visual Studio 2019 (16.8.3) 上编译:
#include <initializer_list>
struct Foo
{
Foo(std::initializer_list<int> = {});
};
int main()
{
Foo f;
}
Foo::Foo(std::initializer_list<int>) {}
它给了我这个错误:
C2512:“Foo”:没有合适的默认构造函数可用
这是一个编译器错误还是我在这里遗漏了什么? 请注意,我已经检查过,这确实在 GCC 10.1 上编译
如果将构造函数的前向声明更改为立即定义,则代码编译不会出错:
#include <initializer_list>
struct Foo
{
Foo(std::initializer_list<int> = {}) {}
};
int main()
{
Foo f;
}
【问题讨论】:
-
嗯,这很奇怪。在 VS-2017 上编译正常吗?
-
确保您的项目设置使用 c++17 或最新版本,vc 默认为 c++14,即使这样,问题也比最近的语言变体多得多。
-
在 VS 16.8.3 (19.28.29335) 中为我工作。检查您是否正在编译您认为正在编译的文件。
-
好的,对不起,我正在编译的代码有一个 ctor 的前向声明,而我最初发布的代码有一个空的 ctor 定义(在这种情况下应该无关紧要)。你能检查一下编辑后的版本是否编译了吗?
-
现在没有了。