| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 563 人关注过本帖
标题:关于链表的操作出错
只看楼主 加入收藏
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
结帖率:50%
收藏
 问题点数:0 回复次数:3 
关于链表的操作出错

用C++写的关于链表的基本操作,在编译通过的情况下,构造时出现了如下错误,何解?
Linking...
main.obj : error LNK2001: unresolved external symbol "public: void __thiscall Link<int>::OutLink(void)" (?OutLink@?$Link@H@@QAEXXZ)
main.obj : error LNK2001: unresolved external symbol "public: int __thiscall Link<int>::InsertLink(int const &)" (?InsertLink@?$Link@H@@QAEHABH@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Link<int>::Link<int>(void)" (??0?$Link@H@@QAE@XZ)
Debug/LinkNode.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.

LinkNode.exe - 4 error(s), 0 warning(s)
以下是源程序:
////////////////////Link.h
#ifndef LINK_H
#define LINK_H
template<class T>
struct LinkNode
{
T data;
struct LinkNode *next;
};
template<class T>
class Link
{
private:
LinkNode<T> *head;
int LinkSize;
public:
Link();
void InitLink(); //初始化链表
void OutLink(); //输出链表
int SearchLink(const T&); //查找
int InsertLink(const T&); //插入
int DeleteLink(const T&); //删除一个结点
int Delete(); //删除整个链表
~Link(){};
};
#endif

////////////////////////Link.cpp
#include"Link.h"
#include<iostream.h>
template<class T>
Link<T>::Link()
{
LinkSize=0;
}
template<class T>
void Link<T>::InitLink()
{
LinkNode<T> *p;
p=new LinkNode<T>;
//p->data=0;
p->next=NULL;
head=p;
}
template<class T>
void Link<T>::OutLink()
{
LinkNode<T> *p;
p=head->next;
while(p!=NULL) {cout<<p->data<<" ";p=p->next;}
}
template<class T>
int Link<T>::SearchLink(const T &a)
{
LinkNode<T> *p;
int i=0;
p=head->next;
while(p!=NULL)
{
if(p->data==a) {cout<<"查找成功,第一次找到为第"<<i<<"个结点。"<<endl;return 1;}
else {p=p->next;i++;}
}
return 0;
}

template<class T>
int Link<T>::InsertLink(const T &a)
{
LinkNode<T> *p,*q;
q=head->next;
p=new LinkNode<T>;
p->data=a;
p->next=NULL;
while(q->next!=NULL) q=q->next;
q->next=p;
LinkSize++;
return 1;
}

template<class T>
int Link<T>::DeleteLink(const T &a)
{
LinkNode<T> *pre,*p,*q;
pre=head;
p=pre->next;
while(p!=NULL)
{
if(p->data==a)
{
q=p;
pre->next=p->next;
delete q;
p=pre->next;
cout<<"删除成功,首次找到的结点为第"<<LinkSize<<"个。"<<endl;
LinkSize--;
return 1;
}
else p=p->next;
}
return 0;
}
template<class T>
int Link<T>::Delete()
{
LinkNode<T> *p;
if(head->next==NULL) return 0;
while(head!=NULL)
{
p=head;
head=head->next;
delete p;
LinkSize--;
}
return 1;
}
/////////////////////////main.cpp
#include"Link.h"
int main()
{
Link<int> q;
q.InsertLink(8);
q.OutLink();
return 0;
}

搜索更多相关主题的帖子: 链表 
2007-10-28 16:46
duffebear
Rank: 1
等 级:新手上路
威 望:2
帖 子:172
专家分:0
注 册:2007-1-30
收藏
得分:0 
很多编译器不支持类模板的分离编译,你把接口和实现放在一个文件里面试一下

死后定当长眠 生前何须久睡
2007-10-29 12:14
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
收藏
得分:0 

放在同一个文件里会提示
error C2440: '=' : cannot convert from 'struct LinkNode *' to 'struct LinkNode<int> *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
d:\c++\linknode\main.cpp(9) : while compiling class-template member function 'void __thiscall Link<int>::OutLink(void)'
d:\c++\linknode\link.h(48) : error C2440: '=' : cannot convert from 'struct LinkNode *' to 'struct LinkNode<int> *'


West and east,home is best……
2007-10-30 09:02
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
嘛~~~~~~指针类型不匹配



by 雨中飞燕 C/C++学习讨论群:46520219
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge)论坛:[/url] http://yzfy.org/
Blog: http://yzfy.programfan.com

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=181314]C++编写的Windows界面游戏[/url]
2007-10-30 10:09
快速回复:关于链表的操作出错
数据加载中...
 
   



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

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