2016-05-14 8 views
-1

Сегодня я пытался внедрить внутренний класс, передавая ему свой внешний класс, а пока я в пространстве имен внешнего класса: Я использую 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 предупреждает меня, что он ожидает, что типа спецификации. Я также пробовал передать указатель (конечно, я тоже изменил конструкторы), но такая же реакция. Для protokoll я уже довольно много экспериментировал и исследовал, но я не могу изолировать четкий ответ на мою проблему.

Неверный текст здесь? Как я могу передать себя тогда на этом этапе?

For Background (only if you're interested):

I tried to write Code for Keybinding in an Application. To pass functions to the Keys i use an "Interface" of class KeyFunction (Base class resembles it).

I now want to give classes (object) the possibility to declare it's own KeyFunction(Derived) and , more important, pass ressources(object) with it, in a way that functions can work on them (since i can only use void pointers, because they are later stored in an array for the bindings) I already achieved this task with other code which i think is to long to post here, though. By experimenting i stumbled across this problem.

ответ

2

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

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

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) 
    { 
    } 
}; 
+0

ах право я должен использовать конструктор для создания экземпляра вещи ... Я в области видимости класса есть, а не вызов функции ^^ спасибо – Meph