неклассный шаблон уже объявлен как шаблон класса - PullRequest
0 голосов
/ 18 февраля 2019

Я клонировал проект из GitHub, который реализован для Linux ( с использованием специального сокета Linux ) для использования в Windows с VC ++.

Изменили необходимую часть, чтобы она соответствовала окнам, но компилируетсяsingleton класс Я получаю сообщение об ошибке, о котором я ничего не знаю, и поиск аналогичного вопроса не дал мне никакой подсказки.

Ошибка C2990: 'ISingleton': шаблон некласса уже объявленв качестве шаблона класса

Singleton.h
------------
#define SINGLETON_ACCESS friend class ISingleton;
template<class T>
class ISingleton {
protected:
    ISingleton() {}
    static T* mInstance;
public:  virtual ~ISingleton(){}
} /* class ISingleton */
template<class T>
T* ISingleton<T>::mInstance = NULL;

и

factory.h
-----------
namespace J1939 {
   class J1939Frame;
   class J1939Factory : public ISingleton<J1939Factory> {
     SINGLETON_ACCESS; /* <---Getting Error Here */
     virtual ~J1939Factory();
   private:
     J1939Factory();
/* ..... */
}

1 Ответ

0 голосов
/ 18 февраля 2019

Проблема в том, что вы определяете friend класс ISingleton

friend class ISingleton;

, где ISingleton является классом шаблона.

template<class T>
class ISingleton { /* ... */ };

Вы не можете: определениеэто friend вы должны указать тип шаблона для него;например (что вы хотите?)

friend class ISingleton<J1939Factory>;
...