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