使用std :: optional <A>作为A类的类成员

问题描述

为什么不能在类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>)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...