Сегодня я попытался создать экземпляр внутреннего класса, передав ему внешний класс и находясь в пространстве имен внешнего класса:
Я использую 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 (Base
класс напоминает это).Теперь я хочу дать классам (объектам) возможность объявить
собственная функция KeyFunction (производная) и, что более важно, передача ресурсов (объект)
с этим, таким образом, что функции могут работать на них (так как я могу только
использовать пустые указатели, потому что они позже сохраняются в массиве для
привязки) я уже выполнил эту задачу с другим кодом, который я думаю
это долго размещать здесь, хотя. Экспериментируя я наткнулся на
Эта проблема.
Ваша ошибка компиляции не имеет ничего общего с вашей иерархией классов, но с тем простым фактом, что вы не строите экземпляр класса.
Попробуйте на самом деле объявить члена класса и конструктор класса:
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)
{
}
};
Других решений пока нет …