Инициализировать 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)
{
}
};