コードについては下記をご覧ください。そのコンパイルは正常に完了しましたが、予期した結果が機能していません。配列の初期化が有効なので、私は非常に混乱していますクラスのデータ型を持つ構造体のメンバーに値を正しく割り当てるにはどうすればよいですか?
//cbar.h
class CBar
{
public:
class CFoo
{
public:
CFoo(int v) : m_val = v {}
int GetVal() { return m_val; }
private:
int m_val;
};
public:
static const CFoo foo1;
static const CFoo foo2;
public:
CBar(CFoo foo) m_barval(foo.GetVal()){}
int GetFooVal() { return m_barval; }
private:
int m_barval;
};
//cbar.cpp
const CBar::CFoo foo1 = CBar::CFoo(2);
const CBar::CFoo foo2 = CBar::CFoo(3);
//main.cpp
struct St
{
CBar::CFoo foo;
};
St st[] = { CBar::foo1, CBar::foo2 };
for(int i=0; i<sizeof(st)/sizeof(St); i++)
{
CBar cbar(st[i].foo);
std::cout << cbar.GetFooVal() << std::endl;
}
しかし、その後私はSt :: fooをポインタに変更します。などCBARのアドレスを割り当てる:: foo1のかCBAR ::このようなfoo2は、その作業を、
//main.cpp
struct St
{
const CBar::CFoo *foo;
};
St st[] = { &CBar::foo1, &CBar::foo2 };
for(int i=0; i<sizeof(st)/sizeof(St); i++)
{
CBar cbar(*st[i].foo);
std::cout << cbar.GetFooVal() << std::endl;
}
本当の問題があります。アプリは出力する必要があります
2
3
アドバイスをしてください。
多くのありがとうございます。あなたがやっているし、それらを意図したとおりにやっていません
const CBar::CFoo foo1 = CBar::CFoo(2);
const CBar::CFoo foo2 = CBar::CFoo(3);
:
この例では正確には何が動作していませんか? –
'CBar :: CBar()'コンストラクタが 'm_barval'を設定していないことに気付きました。これは意図的ですか? – chrisaycock
@chrisaycock:そのミスポポ。編集されました。ありがとう – domlao