编程过程中常见error总结(一)
相信大家在编程的时候都被上面类似的错误困扰过,无法解析的外部符号?什么意思?其实原因几乎是相同的,就是函数只是声明了却没有定义,上面错误列表的出现就是因为我把相应的函数注释掉了(为了演示),但是我们在写较多的代码的时候很容易把某些函数的定义忽略掉,就会造成自己都不知道错误出在哪里。下面就拿几种常见的做解析:
1.《有相应的函数声明但是没有函数定义》——这种比较好理解也容易解决,只要把没有定义的函数的代码补上就行了。例如提示这样的错误信息:错误 2 error LNK2001: 无法解析的外部符号 “public: virtual bool __thiscall SeqStack::IsFull(void)const ” (?IsFull@?$SeqStack@H@@UBE_NXZ)……,这个就代表IsFull(void)这个函数只是声明了,但是用的时候没有相应的定义。
- 《析构函数——重点注意》——这个错误的产生实际上和第一种的原因是一样的,但是这种析构函数忘了定义的情况太容易产生了,所以在这里作为一种易错错误来强调,希望大家永远记住。
- 《重载输出运算符 && 模板类》——这个错误比较特殊,我遇到的时候也郁闷了很久,是在写C++的模板类的时候,重载<<输出运算符(这是我当时的声明:friend ostream & operator << (ostream& os, SeqStack s)),在class外我进行了相应的定义(这是我当时的定义: ostream & operator << (ostream& os, SeqStack s) {
os << “top = ” << s.top << endl; //输出栈顶位置
for (int i = 0; i <= s.top; i++) {
os << i << “:” << s.elements[i] << endl;
}
return os;
})。看似合理的一切总是会报出意外的错误:错误 1 error LNK2019: 无法解析的外部符号 “public: __thiscall SeqStack::~SeqStack(void)” (??1?