3
請參閱下面的代碼。它的編譯成功,但預期的結果不起作用。林非常困惑,因爲我的初始化陣列是有效的,如何正確地賦值給具有類數據類型的結構的成員?
//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更改爲指針。而像C杆分配:: foo1或C杆:: 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
請指教。
非常感謝。
這個例子究竟是不是工作? – 2011-01-13 05:49:43
我注意到你的`CBar :: CBar()`構造函數沒有設置`m_barval`。這是故意的嗎? – chrisaycock 2011-01-13 06:01:10