c++类模板遇到的两则问题
2011-01-06 22:53
155 查看
情景前提:
将类模板的声明和实现分开,分别在头文件和源文件中,平台是vs2005.
第一个问题是关于类模板的基本知识问题,错误类型2039:
通过代码就能复习了,这里mark一下:
声明文件中的代码,文件名:gstack.h
源文件中的代码如下:
第二个问题,在一个cpp文件中要用到模板,即对自己弄好的类模板进行实例化,但是碰到了链接错误LINK2019,纠结,可我明明定义了相关成员函数啊。其实在源文件中写类模板的成员函数之时就在想如何能保证声明文件中的模板参数和源文件中的模板参数一致,即名字应该一致吧。去掉声明文件的include,换成include相应的源文件,程序通过。
这个问题的解决有赖于你的IDE环境:
(1)在code::blocks里面,包含源文件可以通过,同时包含源文件和声明文件也可以通过
(2)但是在linux和vs中,只能包含实现文件,或者你把类模板的声明和实现放一块即放在声明文件中,这样就只需要包含声明文件就好啦。
将类模板的声明和实现分开,分别在头文件和源文件中,平台是vs2005.
第一个问题是关于类模板的基本知识问题,错误类型2039:
通过代码就能复习了,这里mark一下:
声明文件中的代码,文件名:gstack.h
template<class Type, int i> class gstack { public: gstack(); int Initstack(); int DestoryStack(); int ClearStack(); int StackEmpty(); Type* Gettop(); int Push(Type& e); Type* Pop(); int StackTraverse(); void StackOutput(); ~gstack(){ pos=0; delete[] a; a=NULL; } private: int pos; Type* a; };
源文件中的代码如下:
#include "gstack.h" template <class Type, int i> gstack<Type,i>::gstack(){ pos=-1; Initstack(); } template <class Type, int i> int gstack<Type,i>::Initstack(){ a=new Type[i]; if (a==NULL) return 0; else return 1; } template <class Type, int i> int gstack<Type,i>::DestoryStack(){ delete[] a; a=NULL; pos=-1; return 1; } template<class Type, int i> int gstack<Type,i>::StackTraverse(){ if (pos==0||(pos==-1)) { return 1; } else if(pos>=0) { int n=(pos+1)/2; for (int i=1;i<=n;i++) { Type tmp=*(a+i); *(a+i)=*(a+pos+2-i); *(a+pos+2-i)=tmp; } return 1; } else if (pos<0) { return 0; } }
第二个问题,在一个cpp文件中要用到模板,即对自己弄好的类模板进行实例化,但是碰到了链接错误LINK2019,纠结,可我明明定义了相关成员函数啊。其实在源文件中写类模板的成员函数之时就在想如何能保证声明文件中的模板参数和源文件中的模板参数一致,即名字应该一致吧。去掉声明文件的include,换成include相应的源文件,程序通过。
这个问题的解决有赖于你的IDE环境:
(1)在code::blocks里面,包含源文件可以通过,同时包含源文件和声明文件也可以通过
(2)但是在linux和vs中,只能包含实现文件,或者你把类模板的声明和实现放一块即放在声明文件中,这样就只需要包含声明文件就好啦。
相关文章推荐
- SAP SMW0 上传EXCEL模板遇到的问题
- 类模板编译时遇到的问题
- 用C++类模板实现栈结构出现的问题以及思考
- SAP SMW0 上传EXCEL模板遇到的问题
- C++类中包含string类型数据使用read和write实现文件读取和输出时遇到的问题
- 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue
- T4 模板的调试方法,方便大家遇到问题自己快速定位和优化
- 关于C++类模板无法解析的问题
- 使用SMW0上传EXCEL模板遇到的问题
- Lua调用自定义C++类 和遇到的问题解决
- HTML+CSS项目答辩遇到的问题锦集(一)——Bootstrap最基本最简单的模板
- 关于c++类模板及连接问题解决方法
- TFS2010中加载Visual Studio Scrum 1.0过程模板可能遇到的问题
- 整论文模板遇到的一些问题
- 关于C++类模板无法解析的问题
- sencha touch2的itemTpl模板中自动生成img时遇到的无法传递src进去的问题。
- c++类运算符重载遇到的函数形参问题
- C++ 模板遇到的问题(1)
- 生成 Cocos2d-x下Lua调用自定义C++类 遇到的问题
- 重装SQL Server 2005遇到的" 计数器错误 "问题及解决方法两则