C++ 与前向声明的类声明友谊合法吗?
我在visual studio 2008中成功构建了类似于以下代码的内容: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
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。