如何更恰当地处理朋友功能?

时间:2019-04-04 15:48:45

标签: c++ c++14

下面是我用构造函数和复制构造函数创建的String类。我声明了一个包含函数void print(String s);的类M,然后我尝试以类M的朋友的身份打印类String的函数,但它给出了编译时错误,提示{{1 }}不存在。另一方面,如果我使类M成为类M的朋友,则代码出奇地起作用。

String

1 个答案:

答案 0 :(得分:2)

在此问题上,C ++行为相当不一致。使课程M成为朋友将等同于向前声明该课程。但是,让该类的方法成为朋友将需要定义该类:

class String;

class M{
public:
    void print(String s);
};

class String { 
 // definition goes here...
  friend void M::print(String); // now works because compiler is aware of M::print
};

void M::print(String s)
{
   cout<<s.str;
}