我在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
我知道标准一致性不是微软的强项,所以我想知道我写的代码是否以某种方式打破了我尚不理解的标准。有没有人有任何想法?
由于
答案 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;
};
我不明白为什么这可能是非法的。