| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:哪个高手出来帮忙一下
只看楼主 加入收藏
shiyuehai
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:96
专家分:116
注 册:2009-9-4
结帖率:87.5%
收藏
已结贴  问题点数:10 回复次数:5 
哪个高手出来帮忙一下
我用单循环链表实现约瑟夫问题,用类模板编的,编译的时候没错误,当建立的时候就出现下面错误了,请问是什么错误?
Linking...
111.obj : error LNK2001: unresolved external symbol "public: void __thiscall CirList<int>::RemoveThis(void)" (?RemoveThis@?$CirList@H@@QAEXXZ)
111.obj : error LNK2001: unresolved external symbol "public: int __thiscall CirList<int>::GetNext(void)" (?GetNext@?$CirList@H@@QAEHXZ)
111.obj : error LNK2001: unresolved external symbol "public: int __thiscall CirList<int>::GetCount(void)" (?GetCount@?$CirList@H@@QAEHXZ)
111.obj : error LNK2001: unresolved external symbol "public: void __thiscall CirList<int>::SetBegin(void)" (?SetBegin@?$CirList@H@@QAEXXZ)
111.obj : error LNK2001: unresolved external symbol "public: bool __thiscall CirList<int>::AddTail(int)" (?AddTail@?$CirList@H@@QAE_NH@Z)
111.obj : error LNK2001: unresolved external symbol "public: __thiscall CirList<int>::CirList<int>(void)" (??0?$CirList@H@@QAE@XZ)
Debug/约瑟夫问题.exe : fatal error LNK1120: 6 unresolved externals
执行 link.exe 时出错.

还有我把模板注释了就可以运行了,难道vc6.0支持不了模板???知道的说下,谢谢了
搜索更多相关主题的帖子: public 单循环 约瑟夫 
2010-04-20 20:49
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:10 
支持,只是你用错了,但没有代码,不知道你错在哪个地方。
2010-04-20 21:38
shiyuehai
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:96
专家分:116
注 册:2009-9-4
收藏
得分:0 
程序代码:
//结点类声明
template <class T>
class CirListNode
{
    private:
        CirListNode<T> *link;//指向后继结点的指针
        T data;//数据域
    public:
        CirListNode():link(NULL){};//构造函数
        CirListNode(T value):link(NULL),data(value){}
        ~CirListNode(){};//析构函数
        CirListNode<T>* GetLink();//返回结点指针
        void SetLink(CirListNode<T>* next);//设置结点指针
        T& GetData();
};
//结点类实现
程序代码:
#include"CirListNode.h"
template <class T>
void CirListNode<T>::SetLink(CirListNode<T>* next)
{
    link=next;//改变指针
}
template <class T>
CirListNode<T>* CirListNode<T>::GetLink()
{
    return link;
}
template <class T>
T& CirListNode<T>::GetData()
{
    //返回结点的数据
    return
        data;
}
//单循环链表声明
程序代码:
#include"CirListNode.h"
template <class T>
class CirList
{
    public:
        CirList();//构造函数
        ~CirList(){};//析构函数
        bool AddTail(T value);//向单循环链表表尾加入结点
        void RemoveThis();//用来删除cur指向的结点
        void RemoveAll();//删除所有结点
        void SetBegin();//设置cur到head处
        int GetCount();//获取结点个数
        CirListNode<T>* GetCur();//返回指针cur
        bool IsEmpty();//判断是否为空
        T GetNext();//返回cur指向结点存储的数据
    private:
        CirListNode<T>* head;//头指针
        CirListNode<T>* tail;//尾指针
        CirListNode<T>* cur;//标志指针
};
//单循环链表实现
程序代码:
#include"CirList.h"
template <class T>
CirList<T>::CirList()
{
    head=tail=new CirListNode<T>;//新建结点,并初始化head与tail
    cur=NULL;//初始化标志指针
    head->SetLink(head);//创建初始循环
}
template <class T>
bool CirList<T>::AddTail(T value)
{
    //在链表尾加入新结点
    CirListNode<T> *add=new CirListNode<T>(value);//新建结点,用value初始化
    tail->SetLink(add);//把新结点链入表尾
    tail=tail->GetLink();//移动tail至新表尾处
    tail->SetLink(head);//使表尾指针指向表头
    if(tail!=NULL)
        return true;
    else
        return false;

}
template <class T>
void CirList<T>::RemoveThis()
{
    //把cur指向的结点删除
    if(cur==head)
    {
        cur=cur->GetLink();//表头不能删除,若指向表头就把指针下移一位
    }
    CirListNode<T> *preCur=cur;
    for(int i=0;i<this->GetCount();i++)
    {    //使preCur指向cur指向的前一个结点
        preCur=preCur->GetLink();
    }
    preCur->SetLink(cur->GetLink());//删除cur指向的结点
    cur=preCur->GetLink();//删除后cur向后移动一个结点
    preCur=NULL;//使preCur置空
}
template <class T>
void CirList<T>::RemoveAll()
{
    //删除所有结点
    SetBegin();//从第一个结点开始
    int length=GetCount();//获取链表长度
    for(int i=0;i<length;i++)
    {
        RemoveThis();
    }
    cur=head;//把cur置于表头
}
template <class T>
void CirList<T>::SetBegin()
{
    //置cur于表头处
    cur=head;
}
template <class T>
int CirList<T>::GetCount()
{
    int num=0;//定义整形变脸做计数器
    CirListNode<T>* here=cur;//记录当前结点位置
    while(cur->GetLink()!=here)
    {
        //遍历记录
        cur=cur->GetLink();
        ++num;
    }
    cur=cur->GetLink();//使cur回到原来位置
    return
        num;
}
template <class T>
CirListNode<T>* CirList<T>::GetCur()
{
    //返回当前指针
    return cur;
}
template <class T>
bool CirList<T>::IsEmpty()
{
    //判断是否为空
    return
        head->GetLink()==head;
}
template <class T>
T CirList<T>::GetNext()
{
    if(cur==head)
    {
        //跳过表头结点
        cur=cur->GetLink();
    }
    T num=cur->GetData();//获得数据
    cur=cur->GetLink();//把cur移向下个结点
    return num;
}
//约瑟夫问题求解
程序代码:
[color=#0000FF]#include"CirList.h"
#include<cstdlib>
#include<iostream>
using namespace std;
int main()
{
    CirList<int> jos;
    for(int i=1;i<50;i++)
    {
        jos.AddTail(i);
    }
    jos.SetBegin();
    int length=jos.GetCount();
    for(i=1;i<length;i++)
    {
        for(int j=0;j<3;j++)
            jos.GetNext();
        jos.RemoveThis();
    }
    cout<<jos.GetNext()<<endl;
    return 0;
}
麻烦帮我看看,谢谢,写得有点乱[/color]
2010-04-21 18:24
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
模板类的函数定义应该放到头文件里,而不是CPP文件里。否则编译器无法找到函数定义的实体。
我将定义放回头文件,编译可以通过,实事上,模板类是不需要CPP文件的。
2010-04-21 20:27
shiyuehai
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:96
专家分:116
注 册:2009-9-4
收藏
得分:0 
回复 4楼 debroa723
谢谢你啊!!!!就是说我不需要cpp文件,直接在头文件里定义这个类就行了对么????

[ 本帖最后由 shiyuehai 于 2010-4-21 21:01 编辑 ]
2010-04-21 20:58
shiyuehai
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:96
专家分:116
注 册:2009-9-4
收藏
得分:0 
回复 4楼 debroa723
搞定啦,3Q,又学到很总要的知识啦
2010-04-21 21:09
快速回复:哪个高手出来帮忙一下
数据加载中...
 
   



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

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