Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can C++;方法名称是否由标题中的类名限定?_C++_Syntax_Declaration_Classname - Fatal编程技术网

C++ Can 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++语言

简单的问题,这是有效的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’