2014-10-21 2 views
-1

Я ожидаю, что он ниже код, чтобы дать ошибку, но Compiles okПочему частная функция-член подкласса, вызываемого из родительского класса?

class B; 

template<typename T> 
class A 
{ 
    private: 
    A() 
    { 
     T b; 
     b.print(); 
    } 

    void print() 
    { 

    } 
}; 

class B: public A<B> 
{ 

}; 

Как A с возможностью доступа к закрытым членам, конструктор A() и print() из B?

+1

Вы видели свою ссылку _'Compiles ok'_? – P0W

+2

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

+0

Вы ДОЛЖНЫ ВИДЕТЬ [Скомпилировать ok] (http://ideone.com/6Gc4wR). Он НЕ компилируется ВСЕ. – Nawaz

ответ

3

Попробуйте новый экземпляр класса B, он скомпилирует ошибку.

B b;