c++ - 在集合中使用嵌套类时出现类型不完整错误

标签 c++ nested-class incomplete-type

我正在努力将一些 Java 代码翻译成 C++。当我尝试编写如下代码时:

.h:

class A {
  private:
    class B;
    std::set<B> b_set;
};

.cpp:

class A::B {
};

我遇到了一个不完整的类型错误。我理解那是因为嵌套类在 b_set 中使用之前是不完整的。但修复它的最佳方法是什么?

最佳答案

您可以在.h 文件中描述整个B 类。

这是一个工作示例。

#include<set>
class A {
  private:
    class B{
        B():foo(1){}
        int foo;
    };
    std::set<B> b_set;
};

但是,如果你想把你的定义和实例化分开,你可以这样做:

啊啊

#include<set>
class A {

  private:
    class B{
      public:
      B();
      private:
      int someMethod();
      int foo;
    };
    std::set<B> b_set;
};

A.cpp

#include "A.h"
  A::B::B():foo(1){}
  int A::B::someMethod(){
    return 42;
  }

一般来说,嵌套类可能是一个严重的 PITA,因为你必须跳过所有的环才能访问它们。

关于嵌套类的另一个很好的引用:Nested class definition in source file

关于c++ - 在集合中使用嵌套类时出现类型不完整错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769574/

相关文章:

c++ - 将字母 2 × 2 分组

c++ - 如何告诉 VC++ 优化器不要合并函数体?

java - 在 HashMap 或 LinkedList 中将嵌套类设为静态的原因是什么?

派生列表中的 C++ 作用域运算符

c++ - 不完整类型的 std::unique_ptr 无法编译

c++ - 是否通过unilialized指针UB访问静态类成员?

c++ - 带有 openframeworks/opengl 的色度键

c++ - 两级嵌套的 C++ 类适用于 GCC,但不适用于 Clang

c++ - 在类范围内将指针传递给 constexpr 函数时是否滥用推断父模板的参数

c++ - 编译器能否将隐式声明的虚拟析构函数的实现放在一个单独的翻译单元中?