C++嵌套类相互引用

L F*_*itz 2 c++ nested class visual-studio-2017

在C#中我可以有两个嵌套类相互引用而没有问题:

public class CFGFile
{
  class Setting
  {
    public Entry Ent;
  }

  class Entry
  {
    public Setting Setg;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,在C++中尝试相同的操作会导致问题:

class CFGFile
{
  class Setting;

  class Entry
  {
    Setting Setg;
  };

  class Setting
  {
    Entry Ent;
  ]
};
Run Code Online (Sandbox Code Playgroud)

我明白了

"不允许不完整的类型"

在Setg变量定义和错误

"C2079:'CFGFile :: Entry :: Setg'使用未定义的类'CFGFile :: Setting'"

编译时

我正在使用Visual Studio 2017.

在C++的嵌套类中是否可以交叉引用?

CS *_*Pei 5

nested与否无关.在C++中,您不能为这样的两个类/结构交叉引用.解决方法是使用不需要完整类型定义的指针或引用.在您的情况下,尝试以下,

class CFGFile
{
  class Setting;

  class Entry
  {
    Setting* Setg;  // or std::unique_ptr<Setting> Setg;
  };

  class Setting
  {
    Entry Ent;
  };
};
Run Code Online (Sandbox Code Playgroud)

正如@Ted Lyngmo所建议的那样,它std::unique_ptr是现代C++应用程序的首选方式.