简单的问题,这是有效的C++:
class Foo { void Foo::doSomething(); };
这个问题的观点:是重复使用的类名和双冒号的方法名前有效的内部类的声明?
我在编译使用g ++ 4.2.3执行此操作的代码时遇到问题.在挖掘和更改代码之前,我很想看到对这里描述语法的内容的引用.或者降级编译器; 这确实是用g ++ 3.3.6构建的.
我得到的错误是(大致):
Foo.h:3: error: extra qualification ‘Foo::’ on member ‘doSomething’
我做了谷歌,但无法想出一些东西.我没有标准,即使我这样做也可能需要一段时间才能找到任何权威的东西.我不是C++语言律师.
我看一下标准,9.2节将是相关部分.我对BNF并不是那么好,但我没有在BNF中看到任何表明这是允许的班级成员.标识符甚至在BNF中被命名为"unqualified-id".
G ++改变了4.1版本中的行为,显然很多其他编译器接受了这个,但我从未见过这种风格,我不知道为什么有人会这样做.由于它似乎不会在相当多的编译器上触发错误,因此这种风格可能有一些历史原因,但据我所知,它确实无效.
我通过Google找到的唯一好的参考是这个页面,它只是试图解释G ++ 4.1中的一些变化.