博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板类中类内声明类外定义的函数,在类外定义时没加模板时的报错
阅读量:5775 次
发布时间:2019-06-18

本文共 3125 字,大约阅读时间需要 10 分钟。

错误 1 error LNK2019: 无法解析的外部符号 "public: int __thiscall SqList<class StuTab>::getLength(void)" (?getLength@?$SqList@VStuTab@@@@QAEHXZ),该符号在函数 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<<class StuTab>(class std::basic_ostream<char,struct std::char_traits<char> > &,class Student<class StuTab> &)" (??$?6VStuTab@@@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Student@VStuTab@@@@@Z) 中被引用 H:\任老师数据结构\ConsoleApplication96\ConsoleApplication96\SeqList.obj

错误 5 error LNK2019: 无法解析的外部符号 "public: class SqList<class StuTab> & __thiscall SqList<class StuTab>::operator=(class SqList<class StuTab> const &)" (??4?$SqList@VStuTab@@@@QAEAAV0@ABV0@@Z),该符号在函数 "public: class Student<class StuTab> & __thiscall Student<class StuTab>::operator=(class Student<class StuTab> const &)" (??4?$Student@VStuTab@@@@QAEAAV0@ABV0@@Z) 中被引用 H:\任老师数据结构\ConsoleApplication96\ConsoleApplication96\SeqList.obj
错误 4 error LNK2019: 无法解析的外部符号 "public: bool __thiscall SqList<class StuTab>::NextElem(class StuTab,class StuTab &)" (?NextElem@?$SqList@VStuTab@@@@QAE_NVStuTab@@AAV2@@Z),该符号在函数 "void __cdecl ex3_2_6<class StuTab>(class Student<class StuTab> &,char &)" (??$ex3_2_6@VStuTab@@@@YAXAAV?$Student@VStuTab@@@@AAD@Z) 中被引用 H:\任老师数据结构\ConsoleApplication96\ConsoleApplication96\SeqList.obj
错误 3 error LNK2019: 无法解析的外部符号 "public: bool __thiscall SqList<class StuTab>::IsEmpty(void)" (?IsEmpty@?$SqList@VStuTab@@@@QAE_NXZ),该符号在函数 "void __cdecl ex3_2_2<class StuTab>(class Student<class StuTab> &,char &)" (??$ex3_2_2@VStuTab@@@@YAXAAV?$Student@VStuTab@@@@AAD@Z) 中被引用 H:\任老师数据结构\ConsoleApplication96\ConsoleApplication96\SeqList.obj
错误 2 error LNK2019: 无法解析的外部符号 "public: bool __thiscall SqList<class StuTab>::insert(int,class StuTab)" (?insert@?$SqList@VStuTab@@@@QAE_NHVStuTab@@@Z),该符号在函数 "void __cdecl ex3_2_12<class StuTab>(class Student<class StuTab> &,char &)" (??$ex3_2_12@VStuTab@@@@YAXAAV?$Student@VStuTab@@@@AAD@Z) 中被引用 H:\任老师数据结构\ConsoleApplication96\ConsoleApplication96\SeqList.obj

 

最后找出来的原因是:基类的函数成员在类外定义时没有加模板,例如:

1 /*返回给定元素的后继元素,将后继元素存储在next_e中,返回是否返回成功*/ 2 //template
    //没有加模板就会报上述错误 3 Status SqList
::NextElem(ElementType e, ElementType& next_e) 4 { 5 int i = BinSearch(e); //获取e的序号 6 if (i < 1 || i >= Last) //如果待查元素不存在或者是最后一个元素都五后继 7 return ERROR; 8 9 else10 getElem(i + 1, next_e); //获取第i + 1个元素并存入next_e中11 //next_e = elem[i];12 return OK;13 }

 PS:以后再遇到类似根据编译器提示不明确的问题时,可以考虑换一个编译器重新编译试试,因为每个编译器的报错信息都不一样,我们很可能通过新的报错提示找到错误的原因,这次我就是通过吧程序复制到codeblocks上重新编译才发现的错误所在,codeblocks的其中一个错误提示是:

E:\C++\common\5555\myhead.h|32|warning: extra tokens at end of #endif directive [-Wendif-labels]|

E:\C++\common\5555\SqList.h|133|error: specializing member 'SqList<int>::getLength' requires 'template<>' syntax|
E:\C++\common\5555\SqList.h|139|error: specializing member 'SqList<int>::getListSize' requires 'template<>' syntax|
E:\C++\common\5555\SqList.h|145|error: specializing member 'SqList<int>::insert' requires 'template<>' syntax|
可以很容看出,错误是少了模板

转载于:https://www.cnblogs.com/hi3254014978/p/9925361.html

你可能感兴趣的文章
我的友情链接
查看>>
显式锁(第十三章)
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>
springboot系列十 Spring-Data-Redis
查看>>
excel进行矩阵计算
查看>>
基于Android平台的动态生成控件和动态改变控件位置的方法
查看>>
iOS: Block的循环引用
查看>>
MySQL类型转换
查看>>
变量声明提升1
查看>>
树莓派下实现ngrok自启动
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
Javascript 深入浅出原型
查看>>
Magento XML cheatsheet
查看>>
haproxy mysql实例配置
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
JS prototype 属性
查看>>
iphone-common-codes-ccteam源代码 CCEncoding.m
查看>>