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++的嵌套类中是否可以交叉引用?
这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++应用程序的首选方式.