Есть примерно такое:
// file: item.h
class Item
{
protected: // interface
Item(int uii, Item * pParent = 0)
{
m_uiiID = uii;
m_pParent = pParent;
}
public:
virtual ~Item() {};
private: // hidden interface
Item(); /* !!!!!! */
Item(const Item & ) {};
private:
int m_uiiID;
Item * m_pParent;
};
// file: control.h
class Control
: virtual public Item
{
public:
Control(); //: Item(10) {}
Control(Item * pParent); // : Item(10, pParent) {}
virtual ~Control();
};
// file: control.cpp
Control::Control()
: Item(10)
{}
Control::Control(Item * pParent)
: Item(10, pParent)
{}
Control::~Control() {}
// file: main.cpp
void main()
{
Control ctrl;
}
В таком варианте не компилируется (vc71):
error C2248: 'Item::Item' : cannot access private member declared in class 'Item'
...\item.h(37) : see declaration of 'Item::Item'
...\item.h(22) : see declaration of 'Item'
Вариантов два — закомментировать строку в классе Item помеченную восклицательными знаками
ЛИБО!!!
перенести объявления коеструкторов класса Control в h-ник (сейчас закоментарено).
Оба, тем не менее, мне не нравятся, т.к. я этого не понимаю
Есть идеи как это обозвать и как решить?