相关疑难解决方法(0)

std :: vector的不完整类型

当我尝试以下操作时,GCC编译器会抱怨(见下文).class Face需要不完整,因为它包含指向class Element同样包含指针的指针class Face.换句话说,类之间存在循环依赖关系.我该如何解决?

错误:'sizeof'无效应用于不完整类型'Face'

class Face; // needs to be incomplete

class Element
{
    std::vector < std::unique_ptr <Face> > face;
};

class Face
{
    std::vector < std::unique_ptr <Element> > elm;
};
Run Code Online (Sandbox Code Playgroud)

c++ containers smart-pointers incomplete-type

10
推荐指数
1
解决办法
3016
查看次数

如果绝对没有调用成员函数,是否允许使用不完整类型的向量?如果有,从什么时候开始?

假设我有一些不完整的类型

// in foo.hh
struct Hidden;
Run Code Online (Sandbox Code Playgroud)

我想用作 a 的元素类型std::vector。使用unionI 可以“推迟”对构造函数和析构函数的调用以std::vector实现联合构造函数/析构函数。

// in foo.hh
struct Public {
  union Defer {
    std::vector<Hidden> v;
    Defer();
    // add copy/move constructor if needed
    ~Defer();
  } d;
};
Run Code Online (Sandbox Code Playgroud)

现在我只能Public通过包含foo.hh和链接实现Public::Defer::Defer()和的文件来使用Public::Defer::~Defer()。只有那些需要访问Hidden.

这是合法的 C++ 吗?如果有,从什么时候开始?

背景:我在回答另一个问题时提出的问题

c++ vector language-lawyer

5
推荐指数
1
解决办法
918
查看次数