1

如果我省略了这样的命名空间,请遵循这里的问题:

void f(window);

  class window{
    private:
    int a;
    friend void ::f(window);
  };

void f(window rhs){
  std::cout << rhs.a << std::endl;
}

我得到奇怪的行为:

friend void f(window);

编译时没有 f(window) 的前向声明,但是

friend void ::f(window);

才不是:

error C2039: 'f' : is not a member of '`global namespace''

有人可以解释它的原因吗?为什么 :: 会产生这种差异,如果我们无论如何都在全局命名空间中......

谢谢?

4

1 回答 1

1

如果您在朋友声明中没有资格f,它的行为也像普通声明并f在周围的命名空间中声明(在您的情况下是全局的)。

但是,如果您明确地将其限定为::f,则它不再是 的声明f,而只是想要引用已声明的 朋友声明f。但是没有,因此错误。

于 2013-04-09T11:31:45.397 回答