C++ 如何在c++;?

C++ 如何在c++;?,c++,operator-overloading,C++,Operator Overloading,您好,我正在尝试使用StringBad类重载“=”运算符。 我试图将值从StringBad类的一个实例复制到另一个实例(初始化时),而不会出现内存泄漏。我做错了什么? 我的编译器注意到一个错误: In file included from main.cpp:4:0: main.h:15:64: error: member functions are implicitly friends of their class [-fpermissive] friend StringBad &am

您好,我正在尝试使用StringBad类重载“=”运算符。 我试图将值从StringBad类的一个实例复制到另一个实例(初始化时),而不会出现内存泄漏。我做错了什么? 我的编译器注意到一个错误:

In file included from main.cpp:4:0:
main.h:15:64: error: member functions are implicitly friends of their class [-fpermissive]
     friend StringBad & StringBad::operator=(const StringBad & t);
                                                                ^
main.h:49:53: error: definition of implicitly-declared ‘StringBad& StringBad::operator=(const StringBad&)’
 StringBad & StringBad::operator=(const StringBad & t){


#包括
#包括
使用名称空间std;
班长{
私人:
char*str;
静态int num_str;
内伦;
公众:
StringBad(常量字符*s);
StringBad(const StringBad&s);
StringBad();
~StringBad();

friend ostream&operator复制赋值运算符应为该类的成员函数

简单地声明为

StringBad & operator=(const StringBad & t);

您不需要将复制赋值操作符设置为好友。请从声明的开头删除
好友
。另外,您创建自己的字符串类而不仅仅使用
std::string
?我只是试图重载一个相等的操作符:)巡更建议没有帮助…(错误:'StringBad&operator=(const StringBad&)'必须是一个非静态成员函数StringBad&operator=(const StringBad&y){这个构建,您已经做了一些mistake@Xos我展示了必须在类定义中的声明。你能阅读我写的吗?然后重新阅读我的文章。
#include <iostream>
#include <cstring> 
using namespace std;  
class StringBad{
    private:
    char *str;
    static int num_str;
    int len;   
    public:
    StringBad(const char *s);
    StringBad(const StringBad &s);
    StringBad();
    ~StringBad();
    friend ostream & operator<<(ostream & os , const StringBad & st);
    friend StringBad & StringBad::operator=(const StringBad & t);
    };
int StringBad::num_str = 0;
StringBad::StringBad(const char *s){
        len = std::strlen(s);
        str = new char[len + 1];
        strcpy( str, s);
        num_str++;
        cout<<"Obiekt utworzony w 1 konstr, istnieje "<<num_str<<"size:"<<\
        num_str * sizeof(StringBad)<<endl;
}
StringBad::StringBad(){
        len =4;
        str = new char[len + 1];
        strcpy( str, "c++");
        num_str++;
        cout<<"Obiekt utworzony w 2 konstr, istnieje "<<num_str<<"size:"<<\
        num_str * sizeof(StringBad)<<endl;
    }
StringBad::~StringBad(){ --num_str; delete [] str; cout<<"((!))Jest jeszcze:"<<\
num_str<<endl;}
StringBad::StringBad(const StringBad & s){
    len = s.len;
    str = new char [len+1];
    strcpy(str, s.str);
    num_str++;
    cout<<"KK kopiujacy"<<endl;
    }

ostream & operator<<(ostream & os , const StringBad & st){
    os<<st.str;
    return os;
 }

StringBad & StringBad::operator=(const StringBad & t){
    if(this==&t)
        return *this;
    delete [] str;
    len = t.len;
    str = new char [len+1];
    strcpy(str, t.str);
    return *this;

}
StringBad & operator=(const StringBad & t);