| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 328 人关注过本帖
标题:高手请帮忙解决下这个问题
只看楼主 加入收藏
苍海
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-3-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
高手请帮忙解决下这个问题
近期学习数据结构(C++语言版),学到顺序表结构编写了如下的程序
表头文件:List.h
#include <iostream.h>

template<class T>
class List{
    private:
        int n;
        int max_size;
        T* data;    //表元素数组
    public:
        List(int = 10);    //构造函数
        ~List(){delete []data;}        //析构函数
        bool empty() const {return n==0;}
        int size() const {return n;}    //返回表的大小
        int locate(const T& x) const;    //返回表中元素x位置
        bool retrieve(int k,T& x) const;    //返回表中第k个元素x
        List<T>& insert(int k,const T& x);    //在表的位置k处插入元素x
        List<T>& erase(int k,T& x);        //从表中删除位置k处的元素x
        void print_list(ostream& out) const;
};
表实现文件:List.cpp
#include "List.h"

template<class T>
List<T>::List(int max_list_size)
{
    //构造函数
    max_size = max_list_size;
    data = new T[max_size];
    n = 0;
}

template<class T>
int List<T>::locate(const T& x) const
{
    for(int i = 0; i < n;i++)
        if(data[i] == x) return ++i;
    return 0;
}

template<class T>
bool List<T>::retrieve(int k,T& x) const
{
    //在x中存储表的位置k处的元素并返回true
    //表中没有位置k时返回false
    if(k<1||k>n) return false;
    x = data[k-1];
    return true;
}

template<class T>
List<T>& List<T>::insert(int k,const T& x)
{
    //将新元素x插入位置k+1处
    if(k<0||k>n) throw out_bounds();
    if(n==max_size) throw no_mem();
    //向后移动元素
    for(int i = n - 1;i>=k;i--)
        data[i+1] = data[i];
    data[k] = x;
    n++;
    return *this;
}

template<class T>
List<T>& List<T>::erase(int k,T& x)
{
    //删除位置k处的元素并存于x中
    if(retrieve(k,x)){
        //向前移动元素
        for(int i = k;i < n;i++)
            data[i-1] = data[i];
        n--;
        return *this;
    }
    else throw out_bounds();
}

template<class T>
void List<T>::print_list(ostream& out) const
{
    //表中元素送到输出流out中
    for(int i = 0; i < n;i++)
        out<<data[i]<<" ";
}
应用表的文件:MainFile.cpp
#include "List.h"

int main()
{
    List<double> myList(8);

    for(int i = 0; i < 8;i++)
    {
        myList.insert(i+1,i*i);
    }

    return 0;
}
执行编译后出现错误:
Linking...
MainFile.obj : error LNK2001: unresolved external symbol "public: class List<double> & __thiscall List<double>::insert(int,double const &)" (?insert@?$List@N@@QAEAAV1@HABN@Z)
MainFile.obj : error LNK2001: unresolved external symbol "public: __thiscall List<double>::List<double>(int)" (??0?$List@N@@QAE@H@Z)
Debug/ListApp.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

ListApp.exe - 1 error(s), 0 warning(s)

敬请高手帮忙上述问题,谢谢!
搜索更多相关主题的帖子: private include public return 
2010-03-25 17:23
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:10 
List是生成LIB进行静态链接的?
2010-03-25 17:33
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1509
专家分:9241
注 册:2010-3-16
收藏
得分:10 
随便看了下。
#include后面加上using namespace std;

template<class T>
List<T>& List<T>::insert(int k,const T& x)
{
    //将新元素x插入位置k+1处
    if(k<0||k>n) throw out_bounds();    //out_bounds()没有定义
    if(n==max_size) throw no_mem();    //no_mem()没有定义
2010-03-25 19:13
快速回复:高手请帮忙解决下这个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032086 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved