与前瞻性宣布的阶级宣布友谊是否合法?

时间:2010-09-23 19:01:10

标签: c++ g++

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

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

同样,这对视觉工作室非常有效。但是,如果我尝试在g ++版本4.3.2下编译代码,我会收到一条错误消息,例如:

error: friend declaration does not name a class or function

我知道标准一致性不是微软的强项,所以我想知道我写的代码是否以某种方式打破了我尚不理解的标准。有没有人有任何想法?

由于

2 个答案:

答案 0 :(得分:7)

您的代码段在private后缺少冒号。修好之后,它以G ++(http://codepad.org/XJuyEq9z)的方式运行For Me™。

它也是标准的 - 你甚至不需要单独的前向声明。请参阅标准11.4中的此示例:

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

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

答案 1 :(得分:1)

g++ ver 4.4.1中的以下工作。

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

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