我定义了一个类:
#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
并尝试通过以下方式重载赋值运算符:
String& operator=(const String& input) {
buf = input.buf;
length = input.length;
return *this;
}
我得到了buf受保护且长度受到保护的错误代码。我不确定我错过了什么。如何使用vectors
和ints
?
答案 0 :(得分: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);
};
答案 1 :(得分:1)
您需要将实现定义为类的一部分。您缺少类说明符:
// vvvvvvvv
String& String::operator=(const String& input) {
buf = input.buf;
length = input.length;
return *this;
}
如上所述,您正在定义一个自由运算符重载(未绑定到类),并且它实际上invalid无论如何都要声明自由赋值运算符重载。
从免费运算符重载的角度来看,String
的成员,buf
和length
确实无法访问,因为它们是私有的。