Ниже приведен класс String
, который я создал с помощью конструктора и конструктора копирования.Я объявил класс M, который содержит функцию void print(String s);
, затем попытался сделать функцию print класса M
как друга класса String
, но он выдает ошибку времени компиляции, говоря, что M
не существует.С другой стороны, если я сделаю класс M
другом класса String
, то на удивление код сработает.
#include<iostream>
#include<cstring>
using namespace std;
class String{
private:
char* str;
size_t len;
public:
String(char* str){
len=sizeof(str)/sizeof(char);
this->str=new char[(int)len];
strcpy(this->str,str);
}
String(const String& s){
if(str!=s.str)
{
strcpy(str,s.str);
len=s.len;
}
}
friend void M::print(String);//This line gives compile time error saying M does not exists.
// friend class M;//This line on the other hand works completely fine when uncommented
};
class M{
public:
void print(String s){
cout<<s.str;
}
};
int main()
{
char x[6]={'H','e','l','l','o','\0'};
String str=x;
M a;
a.print(str);
return 0;
}