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”: 无法将函数定义与现有的声明匹配
求教怎么改 展开
#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”: 无法将函数定义与现有的声明匹配
求教怎么改 展开
3个回答
展开全部
错误的意思是说你的声明和定义不一样,但仔细看了,你写了没错的。
程序中应该不是这一个错误,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;
}
程序中应该不是这一个错误,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;
}
展开全部
我试了一下,没有上面你的那个错误,不过有其他4个错误(可能与编译器有关)
#include "stdafx.h"这句话删去,不做MFC,用它没什么用,而且我的编译器(VS2012)报错
void PrintList(); 这句你没有写在类里面,只是在外面实现了,要加到LinkList类定义里面。
LinkList<DataType>::LinkList() ;(第一个) 在它的上面加 template<class DataType>
int LinkList<DataType>::Locate(DataType x)这个函数里面p=first->next; 这句话你写成了
p=first-next; 少了一个>,你把"->" 写成 “-” 了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询