C++程序问题,求大神帮我看下哪里错了

#include"stdafx.h"#include<iostream>#include<string>#defineNULL0usingnamespacestd;tem... #include "stdafx.h"
#include<iostream>
#include<string>
#define NULL 0
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class LinkList
{
public:
LinkList();
LinkList(DataType a[],int n);
~LinkList();
int Length();
DataType Get(int i);
int Locate(DataType x);
private:
Node<DataType> *first;
};
LinkList<DataType>::LinkList()
{
first=new Node;
first->next=NULL;
}
template<class DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
Node<DataType> *first,*s,*p;
first=new Node<DataType>;first->next=NULL;
int i;
this->first = first;
for(i=0;i<n;i++)
{
s= new Node<DataType>;s->data=a[i];
s->next=first->next;first->next=s;
}
}

template<class DataType>
LinkList<DataType>::~LinkList()
{
Node<DataType> *q;
while(first!=NULL)
{
q=first;
first=first->next;
delete q;
}
}

template<class DataType>
void LinkList<DataType>::PrintList()
{
Node<DataType> *p;
p=first->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
}

template<class DataType>
int LinkList<DataType>::Length()
{
Node<DataType> *p;
int count;
p=first->next;count=0;
while(p!=NULL)
{
p=p->next;
count++;
}
return count;
}
template<class DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType> *p;
int count;
p=first-next;count=1;
while(p!=NULL)
{
if(p->data==x)return count;
p=p->next;
count++;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int b[3];
b[0]=2,b[1]=4,b[2]=6;
LinkList<int> a(b,3);
a.PrintList();
cout<<a.Length()<<endl;
a.Locate(6);
return 0;
}
一直报错说
错误 1 error C2244: “LinkList<DataType>::Locate”: 无法将函数定义与现有的声明匹配
求教怎么改
展开
 我来答
woxueplc
2013-10-14 · 超过20用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:47.8万
展开全部
错误的意思是说你的声明和定义不一样,但仔细看了,你写了没错的。
程序中应该不是这一个错误,LinkList<DataType>::Locate函数中“p=first-next;count=1;”中少了一个箭头,刚才我在VS2008中调试了下,按照提示做了修改,主函数名和参数用了不支持unicode的main(_tmain是main的别名),头文件#include "stdafx.h"也删了,能正常运行,代码如下:
#include<iostream>
#include<string>
#define NULL 0
using namespace std;
template<class DataType>
struct Node{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class LinkList
{
public: LinkList();
LinkList(DataType a[],int n);
~LinkList();
int Length();
DataType Get(int i);
void PrintList();
int Locate(DataType x);
private: Node<DataType> *first;
};
template<class DataType>
LinkList<DataType>::LinkList()
{
first=new Node;
first->next=NULL;
}
template<class DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
Node<DataType> *first,*s,*p;
first=new Node<DataType>;
first->next=NULL;
int i;
this->first = first;
for(i=0;i<n;i++)
{
s= new Node<DataType>;
s->data=a[i];
s->next=first->next;
first->next=s;
}
}
template<class DataType>
LinkList<DataType>::~LinkList()
{
Node<DataType> *q;
while(first!=NULL)
{
q=first;
first=first->next;
delete q;
}
}
template<class DataType>
void LinkList<DataType>::PrintList()
{
Node<DataType> *p;
p=first->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
}
template<class DataType>
int LinkList<DataType>::Length()
{
Node<DataType> *p;
int count;
p=first->next;
count=0;
while(p!=NULL)
{
p=p->next;
count++;
}
return count;
}template<class DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType> *p;
int count;
p=first->next;count=1;
while(p!=NULL)
{
if(p->data==x)
return count;
p=p->next;
count++;
} return 0;
}
int main()
{
int b[3];
b[0]=2,b[1]=4,b[2]=6;
LinkList<int> a(b,3);
a.PrintList();
cout<<a.Length()<<endl;
a.Locate(6);
return 0;
}
hyfatbd
2013-10-14 · TA获得超过237个赞
知道小有建树答主
回答量:149
采纳率:100%
帮助的人:114万
展开全部

我试了一下,没有上面你的那个错误,不过有其他4个错误(可能与编译器有关)

  1.  #include "stdafx.h"这句话删去,不做MFC,用它没什么用,而且我的编译器(VS2012)报错

  2. void PrintList(); 这句你没有写在类里面,只是在外面实现了,要加到LinkList类定义里面。

  3. LinkList<DataType>::LinkList() ;(第一个) 在它的上面加  template<class DataType>

  4. int LinkList<DataType>::Locate(DataType x)这个函数里面p=first->next; 这句话你写成了

    p=first-next; 少了一个>,你把"->" 写成 “-” 了。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ao特曼078
2013-10-14
知道答主
回答量:16
采纳率:0%
帮助的人:9.5万
展开全部
某个地方错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式