C++ Can C++;方法名称是否由标题中的类名限定?
简单的问题,这是有效的C++:C++ Can C++;方法名称是否由标题中的类名限定?,c++,syntax,declaration,classname,C++,Syntax,Declaration,Classname,简单的问题,这是有效的C++: class Foo { void Foo::doSomething(); }; 问题的关键是:在类声明中,在方法名之前重复使用类名和双冒号是否有效 我在编译使用g++4.2.3执行此操作的代码时遇到问题。在深入研究和修改代码之前,我希望在这里看到一些描述语法的参考。或者降低编译器的级别;这是使用g++3.3.6构建的 我得到的错误是(大致): 我用谷歌搜索了一下,但找不到什么。我没有这个标准,即使我有,也可能要花相当长的时间才能找到权威。我不是C++语言
class Foo
{
void Foo::doSomething();
};
问题的关键是:在类声明中,在方法名之前重复使用类名和双冒号是否有效
我在编译使用g++4.2.3执行此操作的代码时遇到问题。在深入研究和修改代码之前,我希望在这里看到一些描述语法的参考。或者降低编译器的级别;这是使用g++3.3.6构建的
我得到的错误是(大致):
我用谷歌搜索了一下,但找不到什么。我没有这个标准,即使我有,也可能要花相当长的时间才能找到权威。我不是C++语言的律师。< / P> < P>我看了一下标准,第9.2节是相关的部分。我对BNF不是很在行,但我在BNF中没有看到任何关于类成员的内容表明这是允许的。该标识符甚至在BNF中被命名为“非限定id” G++改变了4.1版中的行为,显然很多其他编译器也接受了这一点,但我从未见过使用这种风格,我也不知道为什么会有人这么做。由于它似乎不会在各种各样的编译器上触发错误,所以这种风格可能有一些历史原因,但据我所知,它确实是无效的
我通过谷歌找到的唯一好的参考是,它只是试图解释G++4.1中的一些变化。像Dan一样,我查看了标准,但没有确定的结果。我尝试了您的代码(被认为是世界上最符合标准的),得到了: 第3行:错误:未指定限定名称 在成员声明中允许
如果你有兴趣进一步了解,我建议在新闻组发布一个问题,因为这里有C++语言的律师比这里多很多。 VisualStudio(2008)接受“Fo::”是的,我知道…但是我试图用g++来构建代码,它们通常在接受和不接受的方面有所不同。或者,在我看来,VC似乎接受任何东西,而g++可能会挑剔。:)我认为Foo::充其量是不必要的,充其量是无效的。因此,在我看来,你完全有理由删除它。谢谢,这是一个非常有用的答案。我已经投票赞成了。在接受之前,我会等一段时间,希望能帮助人们有足够的动力进行更多的标准搜索。:)我不知道为什么会有人想使用这种语法,但我知道它是如何神奇地出现的。某种程度上。从cpp复制/粘贴到头文件以内联函数,就是这样。是的,我也怀疑发生了这种情况。谢谢!我对这个问题投了赞成票,但现在我接受了丹的答案,我认为这是有道理的,也是公平的。我还使用Comeau编译器进行标准检查(和错误报告,因为它更具表现力)。这对任何人都是一个很好的建议:使用Comeau检查代码片段(在线或购买,因为它相当便宜)
Foo.h:3: error: extra qualification ‘Foo::’ on member ‘doSomething’