gpt4 book ai didi

c++ - 使用引用访问类对象 C++

转载 作者:行者123 更新时间:2023-11-28 03:04:31 25 4
gpt4 key购买 nike

这个让我难住了。我想要做的是在包装类中获取一个引用变量以指向它包装的类中的结构对象,以便使用包装类的其他类的结构中的任何变量设置实际上都在包装类不是包装类。为此,我尝试在包装类中简单地创建一个对包装类中结构的引用,例如

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 未初始化。

所以在 ClassWrap 的构造函数中,我尝试初始化它。

PlotArgs = AppIfx.PlotArgs;

其中 AppIfx 在运行时设置为指向 CClass 对象的指针。编译器不喜欢 C2758 variable must be initialzied in constructor base/member initializer list 等错误...

如果看起来我正在尝试做一些我完全清楚如何做的事情,那肯定是这样!任何帮助将非常感激。

最佳答案

这是你出错的地方

CClassWrap::InitWrap( CClass AppIfx )
{
PlotArgs = AppIfx.PlotArgs;
}

您不能重新绑定(bind)引用。一旦引用指向某物,它就永远不能指向其他东西。此代码(如果您执行了它)会将 AppIfx.PlotArgs 分配给 PlotArgs 所引用的任何内容,这显然不是您想要的。

你必须把这段代码移到构造函数中

CClassWrap::CClassWrap( CClass AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}

但还要注意,此构造函数代码复制了 CClass 对象,因此它可能不会执行您期望的操作(您最终可能会引用复制的 PlotArgs 对象,尽管这取决于 CClass 复制构造函数的工作方式)。所以最好在这里也使用引用

CClassWrap::CClassWrap( CClass& AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}

关于c++ - 使用引用访问类对象 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com