我懷疑如何在超類上沒有默認構造函數的情況下進行對象初始化。在C++上初始化類對象
#include <iostream>
class A
{
protected:
A(std::string title, int xpos, int ypos);
};
class B : A
{
protected:
//Is that correct?
A* m_pA(std::string title, int xpos, int ypos);
//Why not just A* m_pA;?
public:
B(std::string title, int xpos, int ypos);
};
B::B(std::string title, int xpos, int ypos) : m_pA(title, xpos, ypos)
{
//does nothing yet.
}
正如你可以看到我試圖初始化A
類型的m_pA
對象B的構造函數中,VC是扔我:
"m_pA" is not a nonstatic data member or base class of class "B"
你可以看到的例子編譯和錯誤here。
我想知道爲什麼和如何在沒有默認構造函數的情況下初始化類的成員對象,以及爲什麼我錯了。
在此先感謝!
你真的是從A繼承,並且有一個指向A的成員指針?無論如何,受保護的聲明是一種方法。你仍然需要初始化基地 – sp2danny
'A * m_pA(std :: string title,int xpos,int ypos);'是B類函數返回指向A的指針。 – drescherjm
yea @ sp2danny你可能是對的,我的頭,只是很困惑。 D: 無論如何,如果我想要一個類型爲A的對象,我該如何初始化它?我只想打電話給B,A會被初始化,這就是目標,問題可能不清楚......而且drescherjm你是對的! –