operator =在我的自定义字符串类中无法正常工作
问题描述:
我正尝试使用std :: vector < char>创建自定义字符串类。operator =在我的自定义字符串类中无法正常工作
请看看下面我的代码。
#include <iostream>
#include <vector>
class mString {
public:
mString();
explicit mString(const char *str);
mString(const mString &str);
mString operator=(const char *str);
private:
typedef std::vector<char> vecChar;
vecChar _vc;
};
inline mString::mString(){}
inline mString::mString(const char *str) {
const vecChar::size_type size = strlen(str);
_vc = vecChar(str, str + size);
}
inline mString::mString(const mString &str) {
_vc = str._vc;
}
inline mString mString::operator=(const char *str) {
const vecChar::size_type size = strlen(str);
_vc = vecChar(str, str + size);
return *this;
}
int main(int argc, const char * argv[]) {
/* This works */
mString a;
a = "Hello World";
/* Error : No viable conversion from 'const char[12]' to mString */
mString b = "Hello World";
return 0;
}
我不明白为什么 'mString B = “Hello World” 的;'不工作,而'mString a; a =“Hello World”;'作品。 为了使其工作,我需要做些什么?
预先感谢您!
答
这与赋值运算符没什么共同之处。
你宣布这个构造
explicit mString(const char *str);
与函数说明explicit
。
mString b = "Hello World";
构造
因此不能被称为到字符串文字"Hello World"
到类型mString
的对象转换。
删除函数说明符explicit
并声明将编译。或
而不是拷贝初始化为在声明之上,你可以因此在这个声明
mString b = "Hello World";
有用于构造使用直接初始化像
mString b("Hello World");
。但在这个表达式中
a= "Hello World";
确实使用了赋值运算符。
+0
非常感谢你! –
+0
@ZackLee根本没有。不用谢。 –
_“...不起作用......_”不是问题。你需要告诉我们它是如何工作的。 –
不是[从初始化构造函数和赋值运算符创建的对象之间有什么不同](https://*.com/questions/35167580/what-different-between-object-created-from-initialization-constructor-and-分配)。问题是一样的,但答案是不同的。行'mString b =“...”'不是赋值运算符。它是一个初始化构造函数。 –