当前位置:编程学习 > C/C++ >>

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;
};

 

移到节点类的前面。放在后面的话,你在前面又没有提前声明,在节点类里的引用就成为了一个未完成类型。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,