AccessクラスオブジェクトC ++への参照を使用する
-
26-12-2019 - |
質問
これは私が急降下しています。私がしようとしているのは、ラッパークラス内のStructオブジェクトを指すように、ラッパークラス内の参照変数を取得することです。ラッパークラスを使用する他のクラスからの構造体の変数の設定は実際にはラップされたクラスラッパークラスではありません。これを行うには、
のようなラップされたクラスの構造体へのラップクラスで参照を簡単に作成しようとしました。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は、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;
}
.
Plotargsが開始されていないと、エラーC2758を生成します。
SO CLASSWRAPのCTORでは、INITを試みます。
PlotArgs = AppIfx.PlotArgs;
.
ここで、appifxが実行時にCCLASSオブジェクトへのポインタとして設定されています。コンパイラのどちらかが、エラーが発生していないものもありません.C2758変数は、コンストラクタベース/メンバー初期化リストなどでInitialziedされている必要があります...
私が行う方法について完全に明確なことをしようとしているように見えたら、それは間違いなくそうです!あらゆる助けが高く評価されます。
解決
これはあなたが間違った場所です
CClassWrap::InitWrap( CClass AppIfx )
{
PlotArgs = AppIfx.PlotArgs;
}
.
参照を再バインドすることはできません。参照が何かを指すと、それは他の何かを指すのを参照することはできません。このコード(実行した場合)は、AppIfx.PlotArgs
を参照しているPlotArgs
に割り当てられます。これは明らかに意図したものではありません。
このコードをコンストラクタ
に移動する必要があります。CClassWrap::CClassWrap( CClass AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
.
でもこのコンストラクタコードはCCLASSオブジェクトをコピーすることで、あなたが期待するものをしないかもしれません(ただし、Class Copy Constructorがどのように機能するかによって異なりますが、コピーされたPlotargsオブジェクトを参照することができるかもしれません)。だから、ここで参照を使用する方がおそらくより良い
CClassWrap::CClassWrap( CClass& AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
.