c++模板使用的问题。

来源:百度知道 编辑:UC知道 时间:2024/05/24 22:41:53
我自己写了一个模板类,在VC6.0中的程序,编译执行没有问题;
可是当我把模板文件拷贝到。net (包含了QT开发包)工程中,也想用这个模板时,他为什么会报错了?
我的模板类是一个链表的类CTypedList<T>,类里面定义了一个结构体是链表结点struct ListNode;
可是用.net编译,就会在模板类中一个成员函数处报错,这个函数返回值是
CTypedList<T>::ListNode* ;总是提示*前面类型未定义;
怎么办??

来分析一下 CTypedList<T>::ListNode 这个名称:
由于 T 是模板类型参数,所以 CTypedList<T>::ListNode 是依赖名称
由于使用 :: 符号,且此符号代表“域”的含义,所以 CTypedList<T>::ListNode 是受限名称
结论:CTypedList<T>::ListNode 是“依赖受限名称”

根据现代的模板语法规则,“依赖受限名称”不能表示类型,除非在其前面加关键字 typename。
正是由于这个原因,在模板关键字的选用上,typename 才与 class 有了不同。

楼上正解

CTypedList<T>::ListNode*
改为
typename CTypedList<T>::ListNode*