gpt4 book ai didi

c++ - C++11 中的 "No appropriate default constructor available"

转载 作者:行者123 更新时间:2023-11-28 05:58:10 24 4
gpt4 key购买 nike

我正在尝试使用 C++11 初始化程序来避免编写不必要的默认构造函数。但是,我收到错误“没有合适的默认构造函数可用”,并且不明白为什么。

这是我的代码的简化版本:

struct Foo
{
double fieldA { 0.0 }; // Initializer
short fieldB { 0 }; // Initializer
SomeObj myObj; // Use default ctor of SomeObj

// Foo() = default; // this line doesn't help!

Foo(const SourceData& src)
{ // Error: No Appropriate Default Ctor!
fieldA = src.GetFieldA();
fieldB = src.GetFieldB();
myObj = src.GetObject();
}
};

我看不出编译器生成的默认构造函数不可用且无法工作的任何原因。即使当我“鼓励”编译器生成默认构造函数时,我仍然会收到相同的消息。

如果我真的写出一个默认构造函数,那么它确实有效。但这违背了使用初始值设定项代替构造函数的目的,对吧?


编辑 一些人认为问题出在 SomeObj 及其构造函数上。
SomeObj 也是一个 P.O.D.类,仅使用初始化程序来设置其数据。

最佳答案

您通常应该只初始化初始化列表中的对象,而不是默认构造它们然后分配给它们。

但是,编译器没有理由接受用户编写的空默认构造函数而不是默认构造函数。

最可能的解释是 SomeObj 没有默认构造函数,或者它可能是 explicit

关于c++ - C++11 中的 "No appropriate default constructor available",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com