又见VC6.0奇怪的报错
首先给出报错的代码:
Array<LinkedList<Object*>> array;
Objecte是一个类,具体、抽象无关紧要,Array与LinkedList分别为数组模板类和链表模板类。
那么这行代码的意思就是定义一个数组,数组元素链表,链表中的节点为Object类的指针。
报错为:
d:\template\adt\chainedhashtable.h(22) : error C2146: syntax error : missing ',' before identifier 'array'
d:\template\adt\chainedhashtable.h(22) : error C2065: 'array' : undeclared identifier
d:\template\adt\chainedhashtable.h(22) : error C2143: syntax error : missing '>' before ';'
d:\template\adt\chainedhashtable.h(22) : error C2208: 'class Array' : no members defined using this type
首先对报错的信息进行分析,发现其都是22行报错,再一想,后面的三个错误都是由于第一个错误所表现出来的对array的定义不能够正确识别所造成的,直觉告诉我,这行代码是不存在语法错误。之后选中error C2146按下F1,得到的信息为This error is usually preceeded by error C2065. The most typical cause of this error is a typographical problem. For example:
void main(void)
{
intt x; //Syntax error: missing semicolon before 'x'
}
根据提示,看了下C2065给出的信息,思考了一会儿MSDN给出的几种出错情况,更加确认代码是不存在错误的。由此,将工程关闭,然后用VS2008打开,Ctrl+Shift+B没有报任何错误。果然是VC6.0自身有错误。而且,可以很肯定的是两个模板类之间的嵌套出现了问题,带着尝试的心理,在两个>的前面插入了一个空格,F7,神奇的事发生了,居然的 0 error。输入了两个空格,那么就有这么几种可能了,前面一个导致vc6.0报错,后一个或是两个同时,试了一下,的确是后面的空格的缺失导致的。我的理解是vc6.0将两个连在一起的>当做了位运算符了。
其实,那些VC6.0报错了,然后我们双击报错的信息就能够确定的具体错误的错误相对于这样的错误是不是有点小儿科了?
原作于2012年9月2日