C++ C++;相互引用的嵌套类
在C#中,我可以让两个嵌套类相互引用而不会出现问题:C++ C++;相互引用的嵌套类,c++,class,nested,visual-studio-2017,C++,Class,Nested,Visual Studio 2017,在C#中,我可以让两个嵌套类相互引用而不会出现问题: public class CFGFile { class Setting { public Entry Ent; } class Entry { public Setting Setg; } } 但是,在C++中尝试同样的事情会导致问题: class CFGFile { class Setting; class Entry { Setting Setg; }; cla
public class CFGFile
{
class Setting
{
public Entry Ent;
}
class Entry
{
public Setting Setg;
}
}
<>但是,在C++中尝试同样的事情会导致问题:
class CFGFile
{
class Setting;
class Entry
{
Setting Setg;
};
class Setting
{
Entry Ent;
]
};
我明白了
“不允许类型不完整”
在Setg变量定义和错误
“C2079:'CFGFile::Entry::Setg'使用未定义的类
“CFGFile::Setting”
编译时
我正在使用Visual Studio 2017
是不是在C++中嵌套类中的交叉引用?
这与<代码>嵌套< /COD>无关。在C++中,不能为这样的两个类/结构交叉引用。解决方法是使用不需要完整类型定义的指针或引用。在您的情况下,请尝试以下操作:class CFGFile
{
class Setting;
class Entry
{
Setting* Setg; // or std::unique_ptr<Setting> Setg;
};
class Setting
{
Entry Ent;
};
};
类CFGFile
{
班级设置;
班级报名
{
设置*Setg;//或std::unique\u ptr Setg;
};
班级设置
{
入境事务处;
};
};
如Ted Lyngmo所建议的,
条目的大小,因为它只知道设置
类存在,但还不知道其大小
使用指针,即:
class Setting;
class Entry
{
Setting* Setg;
};
实际上解决了这个问题,因为虽然编译器仍然不知道有关设置的任何信息,但它仍然知道指针的大小(不管指针对象的类型如何)
如前所述,“嵌套”部分对此没有影响。C#-按设计-对类使用引用语义,因此提供的代码段不会导致循环值依赖性。OTC++更喜欢值语义,如果标准没有禁止这种代码,那么它会导致原始样本代码中无限递归;正如前面的回复中所暗示的,如果需要引用语义,则应该用指针/引用语法显式表示 在C#中尝试使用struct而不是class,这应该是一个公平的比较。也不应该起作用。@tkausl因为在上面的C#示例中,正在定义对对象的引用,而不是类类型的对象。我明白了。谢谢值不能为NULL
,因此您编写的是一个条目
,其中包含一个设置
,该设置又包含一个条目
。。。。ad infinitumPerhaps建议使用std::unique\u ptr Setg代码>就好了。