鱼C论坛

 找回密码
 立即注册
查看: 2956|回复: 4

关于类模板问题?

[复制链接]
发表于 2016-9-19 10:14:30 | 显示全部楼层 |阅读模式

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

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

x
如下Stack类.h和.cpp:
  1. template <typename T>
  2. class Stack
  3. {
  4. private:
  5.     enum { MAX = 10};
  6.     int stackSize;
  7.     T* items;
  8.     int top;
  9. public:
  10.     Stack(int ss = MAX);
  11.     Stack(const Stack& st);
  12.     ~Stack() {delete [] items;}
  13.     bool isEmpty();
  14.     bool isFull();
  15.     bool push(const T& item);
  16.     bool pop(T & item);
  17.     Stack & operator=(const Stack& st);
  18. };
复制代码
  1. template<typename T>
  2. Stack<T>::Stack(int ss):stackSize(ss),top(0)
  3. {
  4.     items = new T[stackSize];
  5. }

  6. template<typename T>
  7. Stack<T>::Stack(const Stack &st)
  8. {
  9.     stackSize = st.stackSize;
  10.     top = st.top;
  11.     items = new T[stackSize];
  12.     for(int i = 0; i < top; i++){
  13.         items[i] = st.items[i];
  14.     }
  15. }

  16. template<typename T>
  17. bool Stack<T>::isEmpty()
  18. {
  19.     return top == 0;
  20. }

  21. template<typename T>
  22. bool Stack<T>::isFull()
  23. {
  24.     return top == MAX ;
  25. }

  26. template<typename T>
  27. bool Stack<T>::push(const T &item)
  28. {
  29.     if(top < MAX){
  30.         items[top++] = item;
  31.         return true;
  32.     }
  33.     else
  34.         return false;
  35. }

  36. template<typename T>
  37. bool Stack<T>::pop(T &item)
  38. {
  39.     if(top > 0){
  40.         item = items[--top];
  41.         return true;
  42.     }
  43.     else
  44.         return false;
  45. }
  46. template<typename T>
  47. Stack<T> &Stack<T>::operator=(const Stack &st)
  48. {
  49.     if(this == &st) return *this;
  50.     delete [] items;
  51.     stackSize = st.stackSize;
  52.     top = st.top;
  53.     items = new T[stackSize];
  54.     for(int i = 0; i < top; i++){
  55.         items[i] = st.items[i];
  56.     }
  57.     return *this;
  58. }
复制代码

主函数main如下:
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>

  4. #include "stack.h"

  5. using namespace std;
  6. const int Num = 10;

  7. int main()
  8. {
  9.     srand(time(0));
  10.     cout << "## input stack size: ";
  11.     int stackSize;
  12.     cin >> stackSize;
  13.     Stack<const char *> st(stackSize);
  14.     const char* in[Num]={
  15.         "one","two","three","four","five",
  16.         "six","seven","eight","nine","ten"
  17.     };
  18.     const char* out[Num];
  19.     int processed = 0;
  20.     int nextin = 0;
  21.     while(processed < Num){
  22.         if(st.isEmpty()){
  23.             st.push(in[nextin++]);
  24.         }else if(st.isFull()){
  25.             st.pop(out[processed++]);
  26.         }else if( rand() % 2 && nextin < Num){
  27.             st.push(in[nextin++]);
  28.         }else st.pop(out[processed++]);
  29.     }
  30.     for(int i = 0; i < Num; i++){
  31.         cout << *out[i] <<endl;
  32.     }
  33.     return 0;
  34. }
复制代码

现在编译出现这样的问题
1.:-1: error: symbol(s) not found for architecture x86_64;
2::-1: error: linker command failed with exit code 1 (use -v to see invocation)
编译结果如下:
  1. /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -stdlib=libc++ -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -mmacosx-version-min=10.7 -o class_template1 main.o stack.o   
  2. Undefined symbols for architecture x86_64:
  3.   "Stack<char const*>::pop(char const*&)", referenced from:
  4.       _main in main.o
  5.   "Stack<char const*>::push(char const* const&)", referenced from:
  6.       _main in main.o
  7.   "Stack<char const*>::isFull()", referenced from:
  8.       _main in main.o
  9.   "Stack<char const*>::isEmpty()", referenced from:
  10.       _main in main.o
  11.   "Stack<char const*>::Stack(int)", referenced from:
  12.       _main in main.o
  13. ld: symbol(s) not found for architecture x86_64
  14. clang: error: linker command failed with exit code 1 (use -v to see invocation)
  15. make: *** [class_template1] Error 1
  16. 10:09:02: 进程"/usr/bin/make"退出,退出代码 2 。
  17. Error while building/deploying project class_template1 (kit: Desktop Qt 5.6.1 clang 64bit)
  18. When executing step "Make"
复制代码

请问这种错误该如何解决?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-19 11:19:32 | 显示全部楼层
你那个 模板类 类和实现不要分开文件写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 12:14:19 | 显示全部楼层
Thanks
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-19 20:31:48 | 显示全部楼层
楼主 这些代码是多久写完的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-24 19:01:47 | 显示全部楼层
怎么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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