ошибка наследования шаблона в с ++ - PullRequest
3 голосов
/ 15 ноября 2011

У меня есть два заголовочных файла Ah (включая чисто виртуальную функцию) и Bh

Ah:

#ifndef __A_H__
#define __A_H__

#include "B.h"
template <class T>
class A
{
   virtual B<T> f()=0;
};

#endif

Bh:

#ifndef __B_H__
#define __B_H__

#include "A.h"
template <class T>
class B : public A <T> 
{
  B<T> f(){}
};

#endif

, но когда я компилируюэто дает мне такую ​​ошибку В файле из Bh: 4,из Test.cpp: 1:Ах: 10: ошибка: ISO C ++ запрещает объявление 'B' без типаАх: 10: ошибка: «B» объявлен как «виртуальное» полеАх: 10: ошибка: ожидается ';'до '<' токена </strong>

#include "B.h"

int main() {
 return 0;
}

как я могу решить это?спасибо

1 Ответ

7 голосов
/ 15 ноября 2011

Единственным способом является прямое объявление:

#ifndef __A_H__
#define __A_H__

template< typename > class B;

template <class T>
class A
{
   virtual B<T>* f()=0;
};

#endif

У вас есть проблема с круговой зависимостью , которую можно решить только с помощью прямого объявления .

...