鱼C论坛

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

关于类模板问题?

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

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

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

x
如下Stack类.h和.cpp:
template <typename T>
class Stack
{
private:
    enum { MAX = 10};
    int stackSize;
    T* items;
    int top;
public:
    Stack(int ss = MAX);
    Stack(const Stack& st);
    ~Stack() {delete [] items;}
    bool isEmpty();
    bool isFull();
    bool push(const T& item);
    bool pop(T & item);
    Stack & operator=(const Stack& st);
};
template<typename T>
Stack<T>::Stack(int ss):stackSize(ss),top(0)
{
    items = new T[stackSize];
}

template<typename T>
Stack<T>::Stack(const Stack &st)
{
    stackSize = st.stackSize;
    top = st.top;
    items = new T[stackSize];
    for(int i = 0; i < top; i++){
        items[i] = st.items[i];
    }
}

template<typename T>
bool Stack<T>::isEmpty()
{
    return top == 0;
}

template<typename T>
bool Stack<T>::isFull()
{
    return top == MAX ;
}

template<typename T>
bool Stack<T>::push(const T &item)
{
    if(top < MAX){
        items[top++] = item;
        return true;
    }
    else
        return false;
}

template<typename T>
bool Stack<T>::pop(T &item)
{
    if(top > 0){
        item = items[--top];
        return true;
    }
    else
        return false;
}
template<typename T>
Stack<T> &Stack<T>::operator=(const Stack &st)
{
    if(this == &st) return *this;
    delete [] items;
    stackSize = st.stackSize;
    top = st.top;
    items = new T[stackSize];
    for(int i = 0; i < top; i++){
        items[i] = st.items[i];
    }
    return *this;
}
主函数main如下:
#include <iostream>
#include <cstdlib>
#include <ctime>

#include "stack.h"

using namespace std;
const int Num = 10;

int main()
{
    srand(time(0));
    cout << "## input stack size: ";
    int stackSize;
    cin >> stackSize;
    Stack<const char *> st(stackSize);
    const char* in[Num]={
        "one","two","three","four","five",
        "six","seven","eight","nine","ten"
    };
    const char* out[Num];
    int processed = 0;
    int nextin = 0;
    while(processed < Num){
        if(st.isEmpty()){
            st.push(in[nextin++]);
        }else if(st.isFull()){
            st.pop(out[processed++]);
        }else if( rand() % 2 && nextin < Num){
            st.push(in[nextin++]);
        }else st.pop(out[processed++]);
    }
    for(int i = 0; i < Num; i++){
        cout << *out[i] <<endl;
    }
    return 0;
}
现在编译出现这样的问题
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)
编译结果如下:
/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    
Undefined symbols for architecture x86_64:
  "Stack<char const*>::pop(char const*&)", referenced from:
      _main in main.o
  "Stack<char const*>::push(char const* const&)", referenced from:
      _main in main.o
  "Stack<char const*>::isFull()", referenced from:
      _main in main.o
  "Stack<char const*>::isEmpty()", referenced from:
      _main in main.o
  "Stack<char const*>::Stack(int)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [class_template1] Error 1
10:09:02: 进程"/usr/bin/make"退出,退出代码 2 。
Error while building/deploying project class_template1 (kit: Desktop Qt 5.6.1 clang 64bit)
When executing step "Make"
请问这种错误该如何解决?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-19 11:19:32 | 显示全部楼层
你那个 模板类 类和实现不要分开文件写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 12:14:19 | 显示全部楼层
Thanks
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-19 20:31:48 | 显示全部楼层
楼主 这些代码是多久写完的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-24 19:01:47 | 显示全部楼层
怎么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 15:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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