如何解决"声明朋友时必须使用的类"错误?

shu*_*jan 4 c++ dev-c++ visual-c++ friend-function

class two;
class one
{
    int a;
    public:
        one()
        {
            a = 8;
        }
    friend two;
};

class two
{
    public:
        two() { }
        two(one i)
        {
            cout << i.a;
        }
};

int main()
{
    one o;
    two t(o);
    getch();
}
Run Code Online (Sandbox Code Playgroud)

我从Dev-C++得到这个错误:

a class-key must be used when declaring a friend
Run Code Online (Sandbox Code Playgroud)

但是使用Microsoft Visual C++编译器编译时运行正常.

Arm*_*yan 12

你需要

 friend class two;
Run Code Online (Sandbox Code Playgroud)

代替

 friend two;
Run Code Online (Sandbox Code Playgroud)

此外,您不需要单独向前声明您的类,因为friend-declaration本身就是一个声明.你甚至可以这样做:

//no forward-declaration of two
class one
{
   friend class two;
   two* mem;
};

class two{};
Run Code Online (Sandbox Code Playgroud)

  • 它允许在C++ 11中省略 (5认同)
  • @ desprado07:好吧,因为许多编译器对这个规则并不完全严格(在class声明中出现了class或struct这个词).然而,根据11.4标准规定了它.[另一个问题](http://stackoverflow.com/questions/656948/a-class-key-must-be-declared-when-declaring-a-friend)接受的答案可能会对您有所帮助. (3认同)

Soa*_*Box 5

你的代码有:

friend two;
Run Code Online (Sandbox Code Playgroud)

应该是:

friend class two;
Run Code Online (Sandbox Code Playgroud)