我已经从GitHub克隆了一个项目,该项目针对Linux(使用Linux专用套接字)实现,可在VC ++的Windows中使用。

已经修改了所需的部分以匹配Windows,但是编译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();
/* ..... */
}

最佳答案

问题是您定义了friendISingleton

friend class ISingleton;


其中,ISingleton是模板类。

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


您不能:定义它friend您必须为其指定模板类型;例如(您想要什么?)

friend class ISingleton<J1939Factory>;

09-30 12:33