Конструктор без пераметров
От: Wo-o-olf Россия  
Дата: 05.12.05 14:24
Оценка:
Есть примерно такое:


// 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-ник (сейчас закоментарено).

Оба, тем не менее, мне не нравятся, т.к. я этого не понимаю

Есть идеи как это обозвать и как решить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.