Инициализировать Inner Class с внешним классом это возможно?

Сегодня я попытался создать экземпляр внутреннего класса, передавая ему внешний класс, и пока я нахожусь в пространстве имен внешнего класса: я использую Visual Studo 2013. Код выглядит следующим образом: (смотрите ^^)

class Base
{
public:
    virtual void foo(){ cout << "foo" };
};

class object
{
    class Derived : public Base
    {
        object& o;
    public:
        Derived(object& o) : o(o){}
        virtual void foo(){ cout << "bar" };
    }derived(*this);
//          ^^^^^^
};

Производный класс, унаследовавший что-то, не влияет ни на что в этом примере. (только здесь по контекстным причинам, см. ниже)

В этом пункте ^^ я получаю ошибку: нет подходящего конструктора по умолчанию

Intellisense предупреждает меня, что ожидает спецификации типа. Я также попытался передать указатель (конечно, я тоже изменил конструкторы), но та же реакция. Для протоколла я попробовал довольно много вариантов и исследований к настоящему времени, но я не могу выделить четкий ответ на мою проблему.

Указатель "this" здесь нельзя использовать? Как я могу передать себя тогда на этом этапе?

Для фона (только если вы заинтересованы):

Я пытался написать код для связывания клавиш в приложении. Для передачи функций в Ключи я использую "Интерфейс" класса KeyFunction (Базовый класс напоминает его).

Теперь я хочу дать классам (объектам) возможность объявлять свою собственную функцию KeyFunction(Derived) и, что более важно, передавать ей ресурсы (объект) таким образом, чтобы функции могли работать с ними (поскольку я могу использовать только указатели void, потому что они позже сохраняются в массиве для привязок) Я уже выполнил эту задачу с другим кодом, который я думаю, чтобы долго публиковать здесь, хотя. Экспериментируя, я наткнулся на эту проблему.

1 ответ

Решение

Ваша ошибка компиляции не имеет ничего общего с вашей иерархией классов, но с тем простым фактом, что вы не строите экземпляр класса.

Попробуйте на самом деле объявить члена класса и конструктор класса:

class Base
{
public:
    virtual void foo(){ }
};

class object
{
    class Derived : public Base
    {
        object& o;
    public:
        Derived(object& o) : o(o){}
        virtual void foo(){ }
    };

    Derived derived;

    object() : derived(*this)
    {
    }
};
Другие вопросы по тегам