ссылка константы должна быть инициализирована в списке инициализатора основы/участника конструктора

Я пытаюсь блокировать доступ к конструктору по умолчанию класса, который я пишу. Конструктор, которого я хочу, чтобы другие использовали, требует ссылки константы на другой объект. Я сделал конструктора по умолчанию частным, чтобы препятствовать тому, чтобы другие использовали его. Я получаю ошибку компилятора для конструктора по умолчанию, потому что ссылочная членская переменная константы не инициализируется правильно. Что я могу сделать для создания этой компиляции?

class CFoo
{
public:
    CFoo();
    ~CFoo();
};

class CBar
{
public:
    CBar(const CFoo& foo) : fooReference(foo)
    {
    }

    ~CBar();

private:
    const CFoo& fooReference;

    CBar() // I am getting a compiler error because I don't know what to do with fooReference here...
    {
    }
};
9
задан Trevor Balcom 2 July 2010 в 18:30
поделиться

2 ответа

не объявляет конструктор по умолчанию. Он в любом случае недоступен (автоматически), если вы объявите свой собственный конструктор.

class CBar
{
public:
    CBar(const CFoo& foo) : fooReference(foo)
    {
    }
private:
    const CFoo& fooReference;
};

довольно исчерпывающее объяснение конструкторов можно найти здесь: http://www.parashift.com/c++-faq-lite/ctors.html

13
ответ дан 4 December 2019 в 12:16
поделиться

Самый простой способ создать конструктор по умолчанию, который вы не хотите использовать (как в случае с вашим конструктором, верно?), Просто не определять его, то есть:

class CBar
{
public:
    CBar(const CFoo& foo) : fooReference(foo)
    {
    }

    ~CBar();

private:
    const CFoo& fooReference;

    CBar();
};

В этом случае это может быть немного лишним, потому что компилятор не будет создавать конструктор по умолчанию для класса со ссылочным членом, но лучше поместить его туда на случай, если вы удалите ссылочный член.

4
ответ дан 4 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: