65,211
社区成员
发帖
与我相关
我的任务
分享
template <class T>
struct Node
{
T data;
Node<T>* next;
};
与这样定义结构体有区别???
template <class T>
typedef struct
{
T data;
Node<T>* next;
}Node;
为什么我用后者出了很多错误,而前者没有报错,,,,
第二种形式的:
#include<iostream>
using namespace std;
template <class T>
typedef struct
{
T data;
Node* next;
}Node;
template <class T>
class LinkList
{
private:
Node<T> *first;
int length;
public:
LinkList() {first=NULL;length=0;}
LinkList(T *a,int n);
int Locate(T x);
int Del(T x);
void Insert(int i,T x);
T Get(int i);
int GetLength() {return length;}
ostream& Print(ostream&);
~LinkList();
};
错误如下:
一些慕名的错误,,,汗!!!
main.cpp
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(9) : error C2059: syntax error : '<end Parse>'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(11) : error C2954: template definitions cannot nest
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(27) : see reference to class template instantiation 'LinkList<T>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2501: 'Node' : missing storage-class or type specifiers
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(27) : see reference to class template instantiation 'LinkList<T>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2059: syntax error : '<'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(27) : see reference to class template instantiation 'LinkList<T>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2238: unexpected token(s) preceding ';'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(27) : see reference to class template instantiation 'LinkList<T>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(18) : error C2501: 'first' : missing storage-class or type specifiers
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(27) : see reference to class template instantiation 'LinkList<T>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(18) : error C2501: 'length' : missing storage-class or type specifiers
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(27) : see reference to class template instantiation 'LinkList<T>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(19) : error C2146: syntax error : missing ';' before identifier 'LinkList'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(27) : see reference to class template instantiation 'LinkList<T>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(45) : error C2244: 'LinkList<T>::LinkList<T>::LinkList<T>' : unable to resolve function overload
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(47) : error C2954: template definitions cannot nest
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(48) : error C2039: 'Locate' : is not a member of 'LinkList<T>'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(63) : error C2039: 'Get' : is not a member of 'LinkList<T>'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(79) : error C2039: 'Del' : is not a member of 'LinkList<T>'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(104) : error C2039: 'Insert' : is not a member of 'LinkList<T>'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(131) : error C2039: 'Print' : is not a member of 'LinkList<T>'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(146) : error C2039: '__dtor' : is not a member of 'LinkList<T>'
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(146) : error C2935: 'LinkList<T>' : template-class-id redefined as a global function
c:\documents and settings\administrator\桌面\test\linklist\main.cpp(35) : error C2593: 'operator >>' is ambiguous
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\administrator\桌面\test\linklist\main.cpp(36) : see reference to class template instantiation 'LinkList<struct DATA>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2501: 'Node' : missing storage-class or type specifiers
c:\documents and settings\administrator\桌面\test\linklist\main.cpp(36) : see reference to class template instantiation 'LinkList<struct DATA>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2059: syntax error : '<'
c:\documents and settings\administrator\桌面\test\linklist\main.cpp(36) : see reference to class template instantiation 'LinkList<struct DATA>' being compiled
c:\documents and settings\administrator\桌面\test\linklist\linklist.h(15) : error C2238: unexpected token(s) preceding ';'
c:\documents and settings\administrator\桌面\test\linklist\main.cpp(36) : see reference to class template instantiation 'LinkList<struct DATA>' being compiled
执行 cl.exe 时出错.
当我采用前者定义时就不是这样>....
#include<iostream>
using namespace std;
template <class T>
struct Node
{
T data;
Node* next;
};
template <class T>
class LinkList
{
private:
Node<T> *first;
int length;
public:
LinkList() {first=NULL;length=0;}
LinkList(T *a,int n);
int Locate(T x);
int Del(T x);
void Insert(int i,T x);
T Get(int i);
int GetLength() {return length;}
ostream& Print(ostream&);
~LinkList();
};
Compiling...
main.cpp
main.obj - 0 error(s), 0 warning(s)
template <class T>
typedef struct abc
{
T data;
Node<T>* next;
}Node;
//这样试一下看看怎样