Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ 命名空间成员定义_C++_Namespaces_Definition_Member - Fatal编程技术网

C++ 命名空间成员定义

C++ 命名空间成员定义,c++,namespaces,definition,member,C++,Namespaces,Definition,Member,上面的代码给出了如下错误: “ComeauTest.c”,第3行:错误: 中不允许使用限定名 名称空间成员 宣言 void M::f(){} 及 G++也给出了错误 但是 VS2010编译得很好 我的问题是: a) 预期的行为是什么 b) $7.3.1.2似乎没有提到这一限制。标准的哪一部分指导此类代码的行为 标准的哪一部分指导此类代码的行为 C++03节$8.3表示 声明器id不应被限定,除非其类外侧的成员函数(9.3)或静态数据成员(9.4)的定义,其命名空间外侧的函数或命名空间变量成员的定

上面的代码给出了如下错误:

“ComeauTest.c”,第3行:错误: 中不允许使用限定名 名称空间成员 宣言 void M::f(){}

G++也给出了错误

但是

VS2010编译得很好

我的问题是:

a) 预期的行为是什么

b) $7.3.1.2似乎没有提到这一限制。标准的哪一部分指导此类代码的行为

标准的哪一部分指导此类代码的行为

C++03节$8.3表示

声明器id不应被限定,除非其类外侧的成员函数(9.3)或静态数据成员(9.4)的定义,其命名空间外侧的函数或命名空间变量成员的定义或显式实例化,或者先前在其名称空间之外声明的显式专门化的定义,或者作为另一个类或命名空间的成员的友元函数的声明(11.4)

因此,您的代码格式不正确

然而,在讨论CWG时,一致认为应取消对其名称空间内的合格声明器的禁令1


1:当前问题

7.3.1.2-2
专门讨论了这一点:

命名名称空间的成员也可以通过定义名称的显式限定(3.4.3.2)在该名称空间之外定义,前提是定义的实体已经在名称空间中声明,并且定义出现在包含声明名称空间的名称空间中的声明点之后。

M::f
被认为是命名空间定义之外的定义

namespace M{
   void f();
   void M::f(){}
}

int main(){}