使用引用访问类对象C ++
-
26-12-2019 - |
题
这个让我难过。我正在尝试做的是在包装类中获取一个引用变量,以指向它包装类中的结构对象,以便从使用包装类的其他类中的结构中的任何变量设置实际上都设置在包裹的课堂不是wherpper类。为此,我试图只需在包装类中创建包装类的引用,如
class CClassWrap
{
CClass::plot_type& PlotArgs;
}
.
然后init 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在包装类的Plotarg中显示。为此,我尝试设置在.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在另一个类中继承,调用IT研究
class StudiesBase:: public CClassWrap
{
etc...
}
.
何时编译,给出错误说明CClasswrap存在默认CTOR。所以我添加了一个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 for Classwrap中,我尝试in incor。PlotArgs = AppIfx.PlotArgs;
.
其中appifx以运行时设置为指向cclass对象的指针。编译器不喜欢错误,错误C2758变量必须在构造函数基础/成员初始化程序列表等中初始化...
如果看来我正在尝试做一些我完全清楚的事情,这绝对是这种情况!任何帮助将非常感激。
解决方案
这是你出错的地方
CClassWrap::InitWrap( CClass AppIfx )
{
PlotArgs = AppIfx.PlotArgs;
}
.
无法重新撤销参考。一旦引用引用某些东西,它就永远无法指代其他内容。此代码(如果执行它)将为AppIfx.PlotArgs
分配给引用的任何世代odicetagcode,这显然不是您的意图。
必须将此代码移动到构造函数
中CClassWrap::CClassWrap( CClass AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
.
还注意,此构造函数代码复制了CCLASS对象,因此它可能无法执行您所期望的(您最终会引用复制的Plotargs对象,尽管这取决于CCLASS复制构造函数如何工作方式。因此,在此处使用参考可能会更好
CClassWrap::CClassWrap( CClass& AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
. 不隶属于 StackOverflow