鱼C论坛

 找回密码
 立即注册
查看: 2456|回复: 18

[已解决]问一下c++模板类的调用问题

[复制链接]
发表于 2018-3-14 13:26:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #pragma once
  2. #include<iostream>
  3. template<class T>
  4. class LinearList
  5. {
  6. public:
  7.         LinearList(int size);
  8.         ~LinearList();
  9.         void GetElem(T * l, int i, T * e);
  10. protected:
  11.         T *data;
  12.         int length;
  13.         int maxsize;
  14. };
复制代码
  1. #include"list.h"
  2. #include<iostream>
  3. template<class T>
  4. LinearList<T>::LinearList(int size)
  5. {
  6.         maxsize = size;
  7.         length = 0;
  8.         data = new T[maxsize];
  9.         if (data == 0)
  10.         {
  11.                 std::cerr << "存储分配错误!"; << std::endl;
  12.                 exit(1);
  13.         }
  14. }
  15. template<class T>
  16. LinearList<T>::~LinearList()
  17. {
  18.         delete[] data;
  19. }
  20. //template<class T>
  21. // void LinearList<T>::GetElem(T *l, int i, T *e)
  22. //{
  23. //        *e = l[i - 1];
  24. //}
复制代码
  1. #include"list.h"
  2. #include<iostream>

  3. int main(void)
  4. {
  5.         LinearList list;
  6.        
  7.         return 0;
  8. }
复制代码
最佳答案
2018-3-16 17:30:56

简单来说,就是 声明和定义不能分开
刚刚看了前三篇文章,有兴趣的话,自己研究
无标题.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-14 13:27:34 | 显示全部楼层
不能像普通类一样用 LinearList list;声明 请问要用怎样的格式声明
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 13:50:31 | 显示全部楼层
声明的时候需要指明用哪种类型的数据,比如
LinearList<int> list; //对应T为int类型
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 17:03:01 | 显示全部楼层
BngThea 发表于 2018-3-14 13:50
声明的时候需要指明用哪种类型的数据,比如
LinearList list; //对应T为int类型

捕获.PNG 捕获1.PNG 还是不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 17:15:00 | 显示全部楼层

你没有写默认构造函数,只写了一个带一个参数的构造函数,实例化的时候需要传初值
LinearList<int> list(5);
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 17:23:57 | 显示全部楼层
BngThea 发表于 2018-3-14 17:15
你没有写默认构造函数,只写了一个带一个参数的构造函数,实例化的时候需要传初值
LinearList list(5);

捕获.PNG 捕获1.PNG 呃。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 17:25:15 | 显示全部楼层
其实这些我都试过,就是看不懂最后这个报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 20:00:14 | 显示全部楼层
未灭时间 发表于 2018-3-14 17:25
其实这些我都试过,就是看不懂最后这个报错


//std::cerr << "存储分配错误!"; << std::endl;
std::cerr << "存储分配错误!" << std::endl;



  1. #include<iostream>

  2. template<class T>
  3. class LinearList
  4. {
  5. public:
  6.         LinearList(int size);
  7.         ~LinearList();
  8.         void GetElem(T * l, int i, T * e);
  9. protected:
  10.         T * data;
  11.         int length;
  12.         int maxsize;
  13. };

  14. template<class T>
  15. LinearList<T>::LinearList(int size)
  16. {
  17.         maxsize = size;
  18.         length = 0;
  19.         data = new T[maxsize];
  20.         if(data == 0)
  21.         {
  22.                 //std::cerr << "存储分配错误!"; << std::endl;
  23.                 std::cerr << "存储分配错误!" << std::endl;
  24.                 exit(1);
  25.         }
  26. }

  27. template<class T>
  28. LinearList<T>::~LinearList()
  29. {
  30.         delete[] data;
  31. }
  32. //template<class T>
  33. // void LinearList<T>::GetElem(T *l, int i, T *e)
  34. //{
  35. //        *e = l[i - 1];
  36. //}


  37. int main(void)
  38. {
  39.         LinearList<int> list(10);

  40.         return 0;
  41. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-15 21:52:49 | 显示全部楼层

改了,还是一样的报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 22:15:19 | 显示全部楼层
未灭时间 发表于 2018-3-15 21:52
改了,还是一样的报错

我需要错误信息

在我这边正常
  1. $ ls
  2. main.cpp
  3. $ cat main.cpp
  4. #include<iostream>

  5. template<class T>
  6. class LinearList
  7. {
  8. public:
  9.         LinearList(int size);
  10.         ~LinearList();
  11.         void GetElem(T * l, int i, T * e);
  12. protected:
  13.         T * data;
  14.         int length;
  15.         int maxsize;
  16. };

  17. template<class T>
  18. LinearList<T>::LinearList(int size)
  19. {
  20.         maxsize = size;
  21.         length = 0;
  22.         data = new T[maxsize];
  23.         if(data == 0)
  24.         {
  25.                 //std::cerr << "存储分配错误!"; << std::endl;
  26.                 std::cerr << "存储分配错误!" << std::endl;
  27.                 exit(1);
  28.         }
  29. }

  30. template<class T>
  31. LinearList<T>::~LinearList()
  32. {
  33.         delete[] data;
  34. }
  35. //template<class T>
  36. // void LinearList<T>::GetElem(T *l, int i, T *e)
  37. //{
  38. //        *e = l[i - 1];
  39. //}


  40. int main(void)
  41. {
  42.         LinearList<int> list(10);

  43.         return 0;
  44. }

  45. $ g++ main.cpp
  46. $ ls
  47. a.out  main.cpp
  48. $
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-15 23:01:25 | 显示全部楼层
人造人 发表于 2018-3-15 22:15
我需要错误信息

在我这边正常

捕获1.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 23:04:40 | 显示全部楼层

这样看不出什么
我需要一个完整的截图
如果可以,截一下整个vs窗口的截图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 13:01:59 | 显示全部楼层
人造人 发表于 2018-3-15 23:04
这样看不出什么
我需要一个完整的截图
如果可以,截一下整个vs窗口的截图

捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 13:31:43 | 显示全部楼层

好了,现在可以贴代码了,那三个文件都贴出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 16:46:11 | 显示全部楼层
  1. #pragma once
  2. #include<iostream>
  3. template<class T>
  4. class LinearList
  5. {
  6. public:
  7.         LinearList(int size);
  8.         ~LinearList();
  9.        
  10. protected:
  11.         T *data;
  12.         int length;
  13.         int maxsize;
  14. };
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 16:49:15 | 显示全部楼层

  1. #include"list.h"
  2. #include<iostream>
  3. template<class T>
  4. LinearList<T>::LinearList(int size)
  5. {
  6.         maxsize = size;
  7.         length = 0;
  8.         data = new T[maxsize];
  9.         if (data == 0)
  10.         {
  11.                 std::cerr << "存储分配错误!" << std::endl;
  12.                 exit(1);
  13.         }
  14. }

  15. template<class T>
  16. LinearList<T>::~LinearList()
  17. {
  18.         delete[] data;
  19. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 16:49:50 | 显示全部楼层
人造人 发表于 2018-3-16 13:31
好了,现在可以贴代码了,那三个文件都贴出来
  1. #include"list.h"
  2. #include<iostream>

  3. int main(void)
  4. {
  5.         LinearList<int> list(100);
  6.        
  7.         return 0;
  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 17:30:56 | 显示全部楼层    本楼为最佳答案   

简单来说,就是 声明和定义不能分开
刚刚看了前三篇文章,有兴趣的话,自己研究
无标题.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 19:49:46 | 显示全部楼层
人造人 发表于 2018-3-16 17:30
简单来说,就是 声明和定义不能分开
刚刚看了前三篇文章,有兴趣的话,自己研究

谢谢,我去看一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 06:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表