C语言写单循环链表类出错问题
我在写一个单循环链表类,报错很多,一看一大篇,实在无从下手查错,我就采取删代码的方法,在报错不变的情况下,把代码简化,尽管代码本身失去了原来的实际意义,但是缩小了查错的范围,最后我得到的代码如下:
#include<string>
using namespace std;//迭代器
template<class T>
class Iterator {
public:
int i;
Iterator() {i=10;}
};
//节点类
template<class T>
class Node {
friend class CircChain<T>;
friend class Iterator<T>;
public:
int data;
};
//单循环链表
template<class T>
class CircChain {
friend class Iterator<T>;
public:
CircChain() {size=0;}
int size;
};//主函数
int main() {
CircChain<int> c();
return 0;
}
这代码是我在原来基础上删减得到的,虽然代码本身没有实际意义,但是在削减长度的情况下报错情况没变。。。。 这就很有意义了。。。。
c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(21): error C2059: 语法错误:“<”
1> c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(28): 参见对正在编译的类 模板 实例化“Node<T>”的引用
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(21): error C2238: 意外的标记位于“;”之前
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(22): error C2059: 语法错误:“<”
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(22): error C2238: 意外的标记位于“;”之前
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(41): error C2989: “CircChain”: 类 模板 已经声明为非类 模板
1> c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(21) : 参见“CircChain”的声明
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(31): error C3857: “CircChain”: 不允许使用多个 模板 参数列表
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(59): error C2989: “Iterator”: 类 模板 已经声明为非类 模板
1> c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(22) : 参见“Iterator”的声明
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(44): error C3857: “Iterator”: 不允许使用多个 模板 参数列表
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(63): error C2143: 语法错误 : 缺少“;”(在“<”的前面)
1>c:\users\adm\documents\visual studio 2010\projects\second\second\test2.cpp(63): error C2143: 语法错误 : 缺少“;”(在“<”的前面)
1>
1>生成失败。
1>
1>已用时间 00:00:01.53
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这是怎么个情况?
处理方法:
把下面这块:
//单循环链表
template<class T>
class CircChain {
friend class Iterator<T>;
public:
CircChain() {size=0;}
int size;
};
移到节点类的前面。放在后面的话,你在前面又没有提前声明,在节点类里的引用就成为了一个未完成类型。