问题描述
为什么不能在类A中定义类型为std :: optional 的类成员?
示例:
#include <optional>
class A {
public:
A(std::optional<A> optional = {}) : optional_(optional) { }
~A() = default;
private:
std::optional<A> optional_;
};
编译器错误:
error: incomplete type 'A' used in type trait expression
: public integral_constant<bool,__is_trivially_destructible(_Tp)> {};
^
error: incomplete type 'A' used in type trait expression
: public integral_constant<bool,__is_constructible(_Tp,_Args...)>
^
解决方法
=IF(LEN(F7*1)<3,IF(H7 < -3,0.9*F7,IF(H7 < 3,F7,F7*.95)),0.95*F7,F7*1.01)))
要求optional<T>
是完整类型(因此具有已知大小)。在类T
的定义完成之前,A
是不完整的类型。因此是错误。
由于A
本身具有类型{{的成员变量,因此,T
不能拥有类型optional<T>
的成员变量。 1}}。您可以堆分配optional<T>
(或仅分配T
,因为您要存储的指针可能是optional<T>
)。