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

时间:2013-11-18 16:06:50

标签: c++ inheritance reference addressing

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

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。所以我添加了一个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的ctor中我尝试初始化它。

PlotArgs = AppIfx.PlotArgs;

其中AppIfx在运行时设置为指向CClass对象的指针。编译器不喜欢错误C2758变量必须在构造函数base / member初始化列表等中初始化...

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

1 个答案:

答案 0 :(得分:2)

这是你出错的地方

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

你无法重新引用参考文献。一旦引用引用了某些东西,它就永远不会被引用到别的东西上。此代码(如果您执行它)会将AppIfx.PlotArgs分配给所提及的PlotArgs,这显然不是您的意图。

您必须将此代码移动到构造函数

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

但是请注意,这个构造函数代码会复制CClass对象,因此它可能无法达到您的预期(您可能最终会引用复制的PlotArgs对象,尽管这取决于CClass复制构造函数的工作方式)。所以在这里使用引用可能更好

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