C++ 与前向声明的类声明友谊合法吗?

C++ 与前向声明的类声明友谊合法吗?,c++,g++,C++,G++,我在visual studio 2008中成功构建了类似于以下代码的内容: class OpDevconfigSession; class DevconfigSession { ... private friend class OpDevconfigSession; }; 同样,这在VisualStudio中非常有效。但是,如果我尝试在g++版本4.3.2下编译代码,我会收到一条错误消息,例如: error: friend declaration does not name a cla

我在visual studio 2008中成功构建了类似于以下代码的内容:

class OpDevconfigSession;
class DevconfigSession
{
... 
private
   friend class OpDevconfigSession;
};
同样,这在VisualStudio中非常有效。但是,如果我尝试在g++版本4.3.2下编译代码,我会收到一条错误消息,例如:

error: friend declaration does not name a class or function
我知道标准一致性不是微软的强项,所以我想知道我写的代码是否在某种程度上违反了标准,而我还不明白。有人有什么想法吗


谢谢

您的代码片段在
private
之后缺少冒号。修好后,它对我有用™ 在g++中(http://codepad.org/XJuyEq9z)

它也是标准的——您甚至不需要单独的远期声明。参见本标准第11.4节中的示例:

class X {
    enum { a=100 };
    friend class Y;
};

class Y {
    int v[X::a];        // OK, Y is a friend of X
};

以下是我在
g++ver4.4.1
中的工作

class OpDevconfigSession;
class DevconfigSession
{
  private:
   friend class OpDevconfigSession;
};

我不明白为什么这可能是非法的。

是的,丢失的冒号是我的一个转录错误。那么,我认为这是一个已经在g++中修复的bug。