C++ 带类和向量的重载赋值运算符

C++ 带类和向量的重载赋值运算符,c++,vector,operator-overloading,C++,Vector,Operator Overloading,我定义了一个类: #ifndef _STRINGCLASS_H #define _STRINGCLASS_H using namespace std; #include <iostream> #include <vector> class String { protected: int length; vector<string> buf; public: String(); String(const char* inpu

我定义了一个类:

#ifndef _STRINGCLASS_H
#define _STRINGCLASS_H
using namespace std;

#include <iostream>
#include <vector>

class String {
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(const String& input);
    String(char input, int input2);

    String& operator=(const String& input);


};

#endif

我得到了buf受保护和长度受保护的错误代码。我不确定我错过了什么。如何使用
向量
整数
正确重载赋值运算符?

您需要将实现定义为类的一部分。您缺少类说明符:

//      vvvvvvvv
String& String::operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载


从不是
String
成员的自由运算符重载的角度来看,
buf
length
确实是不可访问的,因为它们是私有的。

您需要将实现定义为类的一部分。您缺少类说明符:

//      vvvvvvvv
String& String::operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载


从不是
String
成员的自由运算符重载的角度来看,
buf
length
确实是不可访问的,因为它们是私有的。

您需要将实现定义为类的一部分。您缺少类说明符:

//      vvvvvvvv
String& String::operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载


从不是
String
成员的自由运算符重载的角度来看,
buf
length
确实是不可访问的,因为它们是私有的。

您需要将实现定义为类的一部分。您缺少类说明符:

//      vvvvvvvv
String& String::operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载


从不是
String
成员的自由运算符重载的角度来看,
buf
length
确实是不可访问的,因为它们是私有的。

您不需要为类提供任何特殊的成员函数,因为编译器合成的函数在这种情况下会做正确的事情。最好的选择是从类定义中删除赋值运算符并复制构造函数

class String 
{
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(char input, int input2);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入2);
};

您不需要为类提供任何特殊的成员函数,因为在这种情况下,编译器合成的函数将做正确的事情。最好的选择是从类定义中删除赋值运算符并复制构造函数

class String 
{
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(char input, int input2);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入2);
};

您不需要为类提供任何特殊的成员函数,因为在这种情况下,编译器合成的函数将做正确的事情。最好的选择是从类定义中删除赋值运算符并复制构造函数

class String 
{
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(char input, int input2);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入2);
};

您不需要为类提供任何特殊的成员函数,因为在这种情况下,编译器合成的函数将做正确的事情。最好的选择是从类定义中删除赋值运算符并复制构造函数

class String 
{
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(char input, int input2);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入2);
};

隐式生成的赋值运算符也执行相同的操作,因此,如果函数中除了此处显示的内容之外没有其他内容,那么最好不要自己定义它(或在C++11中定义为
default
),隐式生成的赋值运算符也执行相同的操作,因此,如果函数中除了此处显示的内容之外没有其他内容,那么最好不要自己定义它(或在C++11中定义为
default
),隐式生成的赋值运算符也会执行相同的操作,因此,如果函数中除了此处显示的内容之外没有其他内容,那么最好不要自己定义它(或在C++11中定义为
default
),隐式生成的赋值运算符也会执行相同的操作,因此,如果函数中除了这里显示的内容之外没有其他内容,那么最好不要自己定义它(或者在C++11中定义为
default