代码如下:
template <class Type> class Queue { public: //代码略 //... private: //代码略 //... public: void Queue<Type>::push( Type & ) { //代码略 //... } void pop() { //代码略 //... } //C++Primer第16.6.3.章节 //特化成员而不特化类 //照着书上的代码复制粘贴过来在VS2005下编译报错 //error C2039: “push”: 不是“Queue<Type>”的成员 template<> Queue<const char*>::push(const char *const &val) { //代码略 //... } template<> void pop( ) { //代码略 //... } };
需求是为Queue类实现const char * 类型的特化函数,请问这是编译器的问题没得办法解决吗?代码是照着C++ Primer书上复制粘贴的。
解决方案:10分
请把那一段代码挪到类定义外面。
解决方案:10分
//C++Primer第16.6.3.章节 //特化成员而不特化类 //照着书上的代码复制粘贴过来在VS2005下编译报错 //error C2039: “push”: 不是“Queue<Type>”的成员 template<> Queue<const char*>::push(const char *const &val) { //代码略 //... } template<> void pop( ) { //代码略 //... }
这个放到类外面,这是和外面的那个模板类并列的
解决方案:20分
正常的代码应该是这样
template <class Type> class Queue { void push(Type &); }; template <> void Queue<const char*>::push(const char *&val) { }
请自行比对