C++ 使用引用访问类对象C++;
这件事把我难住了。我要做的是在包装器类中获取一个引用变量,以指向它包装的类中的struct对象,这样,来自使用包装器类的其他类的结构中的任何变量设置实际上都是在包装的类中设置的,而不是在包装器类中设置的。为此,我尝试在wrap类中创建一个对wrap类中结构的引用,如C++ 使用引用访问类对象C++;,c++,inheritance,reference,addressing,C++,Inheritance,Reference,Addressing,这件事把我难住了。我要做的是在包装器类中获取一个引用变量,以指向它包装的类中的struct对象,这样,来自使用包装器类的其他类的结构中的任何变量设置实际上都是在包装的类中设置的,而不是在包装器类中设置的。为此,我尝试在wrap类中创建一个对wrap类中结构的引用,如 class CClassWrap { CClass::plot_type& PlotArgs; } 然后初始化PlotArgs CClassWrap::InitWrap( CClass AppIfx ) {
class CClassWrap
{
CClass::plot_type& PlotArgs;
}
然后初始化PlotArgs
CClassWrap::InitWrap( CClass AppIfx )
{
PlotArgs = AppIfx.PlotArgs;
}
我只想让PlotArgs指向包装类的PlotArgs,这样当从中访问PlotArgs时,可以这样说
class StudiesBase:public CClassWrap
{
//12 should show up in CClass because PlotArgs in CClassWrap points to the PlotArgs on CClass.
PlotArgs.value = 12;
}
12显示在PlotArgs的包装类版本中。为此,我尝试设置.h文件中定义的引用,如下所示
#include "CClass.h"
class CClassWrap
{
//PlotArgs is a struct with a few vars in it (int, long, etc.) that exists in CClass
CClass::plot_type& PlotArgs;
}
CClassWrap在另一个类中继承,称之为StudiesBase
class StudiesBase:: public CClassWrap
{
etc...
}
编译时,会出现一个错误,说明CClassWrap不存在默认的ctor。所以我加了一个向量
这样CClassWrap现在看起来像
class CClassWrap
{
public:
CClassWrap();
public:
//PlotArgs is a struct with a few vars in it (int, long, etc.) that exists in CClass
CClass::plot_type& PlotArgs;
}
这将生成一个错误C2758,表示未初始化PlotArgs
所以在类包装的ctor中,我尝试初始化它
PlotArgs = AppIfx.PlotArgs;
其中,AppIfx在运行时设置为指向CClass对象的指针。编译器也不喜欢在构造函数基/成员初始值设定项列表中初始化C2758变量,等等
如果我试图做一些我完全清楚该怎么做的事情,那肯定是这样!任何帮助都将不胜感激 这就是你出错的地方
CClassWrap::InitWrap( CClass AppIfx )
{
PlotArgs = AppIfx.PlotArgs;
}
不能重新绑定引用。一个参照物一旦涉及到某件事,就永远不可能涉及到另一件事。此代码(如果您执行它)会将AppIfx.PlotArgs
分配给所引用的PlotArgs
,这显然不是您想要的
必须将此代码移到构造函数中
CClassWrap::CClassWrap( CClass AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
但还要注意,此构造函数代码复制了CClass对象,因此它可能不会执行预期的操作(您可能最终引用复制的PlotArgs对象,尽管这取决于CClass copy构造函数的工作方式)。因此,在这里使用参考可能更好
CClassWrap::CClassWrap( CClass& AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
我想这是…的复制品。。。这本身就是的一个副本,具体来说,它们出错的地方是没有初始化引用。第一个代码示例中的行将是有效的,除非它不符合OP的期望。感谢您的反馈。在CClassWrap::CClassWrap(const CClass&AppIfx)行中:PlotArgs(AppIfx.PlotArgs)AppIfx在PlotArgs(AppIfx.PlotArgs)中未被编译器识别。它给出了一个C2440。转换将丢失限定符,因为需要修改PlotArgs以删除C2440。嗯,考虑到语言需要设置引用和其他因素的方式,我将不得不寻找其他方式来完成我所需要的。但这是一个完整的答案,所以我这样做了。谢谢!