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