古怪的 C++ 问题
我好多年没写 C++ 程序了,读 C++ 代码也是偶尔为之。
今天晚上就碰到这么一个诡异的问题,我觉得是我太久没摸 C++ 了,对那些奇怪的语法细则已经不那么熟悉了。有知道的同学给我解惑一下吧。
事情的起因是,我想安装一个 perl 模块唤作 Syntax::Highlight::Universal 。
本来用 CPAN 安装很方便的,直接 install 即可。
可是在我的机器上,make 死活通不过。我就仔细研究了一下编译出错信息。又读了一下源代码,自己感觉没错。纠结了半天,仔细模仿出错的地方写了一小段程序测试。
各位同学觉得有问题么?我初看觉得没有。但是 gcc 一编译就出错。一开始是觉得 gcc 版本太高(4.x),可能语法检查更严格了。后来换了 gcc3 ,问题依旧。
出错信息如下:
a.cpp: In member function `void B
a.cpp:11: error: `a' was not declared in this scope
就是在 B 里找不到 A 定义的成员变量 a 。
如果 A 不是一个 template ,那么这个问题就没有。
我琢磨着这个问题跟编译器为 template 生成代码的行为有关,但是不确定。
注:这段代码在 VC6 里是可以正常编译的。
最后,我试了一下,把代码改成
void foo() {
this->a=0;
}
那么是可以编译通过的了。可是,这是新标准规定的么?
btw, 其实我写 C++ 的最后一年,都养成了显式用 this 指针的习惯。这样比较少犯错误。
Comments
Posted by: 书豪 | (19) September 22, 2010 04:58 PM
Posted by: 李扬 | (18) February 5, 2010 10:13 PM
Posted by: sandy | (17) February 5, 2010 06:42 PM
Posted by: roy_hu | (16) February 5, 2010 07:51 AM
Posted by: 水的影子 | (15) January 31, 2010 11:33 AM
Posted by: Scan | (14) January 30, 2010 12:44 PM
Posted by: dwing | (13) January 30, 2010 12:36 PM
Posted by: 阿土仔(垚垚) | (12) January 30, 2010 10:16 AM
Posted by: Anonymous | (11) January 29, 2010 11:07 PM
Posted by: 雷勇 | (10) January 29, 2010 10:17 PM
Posted by: analyst | (9) January 29, 2010 11:34 AM
Posted by: kai | (8) January 29, 2010 10:38 AM
Posted by: xuzhongxing | (7) January 29, 2010 10:28 AM
Posted by: Kevin Lynx | (6) January 29, 2010 09:05 AM
Posted by: wuqing | (5) January 29, 2010 08:38 AM
Posted by: Atry | (4) January 29, 2010 08:19 AM
Posted by: xuxl | (3) January 29, 2010 08:08 AM
Posted by: voidinit | (2) January 29, 2010 01:57 AM
Posted by: TheAnswer | (1) January 29, 2010 12:47 AM