C++ 运算符=不';在自定义字符串类中无法正常工作
我正在尝试使用std::vectorC++ 运算符=不';在自定义字符串类中无法正常工作,c++,class,constructor,initialization,explicit-conversion,C++,Class,Constructor,Initialization,Explicit Conversion,我正在尝试使用std::vector创建一个自定义字符串类 请看下面我的代码 #include <iostream> #include <vector> class mString { public: mString(); explicit mString(const char *str); mString(const mString &str); mString operator=(const char *str); p
#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{
公众:
mString();
显式mString(const char*str);
mString(常量mString&str);
mString运算符=(常量字符*str);
私人:
typedef std::vector vecChar;
vecChar vc;
};
内联mString::mString(){}
内联mString::mString(const char*str){
const vecChar::size_type size=strlen(str);
_vc=vecChar(str,str+size);
}
内联mString::mString(常量mString&str){
_vc=str.\u vc;
}
内联mString mString::operator=(常量字符*str){
const vecChar::size_type size=strlen(str);
_vc=vecChar(str,str+size);
归还*这个;
}
int main(int argc,const char*argv[]{
/*这很有效*/
mString a;
a=“你好,世界”;
/*错误:从“常量字符[12]”到mString没有可行的转换*/
mString b=“你好,世界”;
返回0;
}
我不明白为什么要'mString b=“HelloWorld”'“mString a”时不工作;a=“你好,世界”作品
我需要做什么才能使它工作
提前谢谢你 这与赋值运算符没有任何共同之处 您声明了这个构造函数
explicit mString(const char *str);
使用函数说明符explicit
因此,在本宣言中
mString b = "Hello World";
mString b = "Hello World";
无法调用构造函数将字符串文字“Hello World”
转换为类型为mString
的对象
删除函数说明符explicit
,声明将编译
或者,您可以使用直接初始化来代替上面声明中的复制初始化,如
mString b( "Hello World" );
所以在这个宣言中,
mString b = "Hello World";
mString b = "Hello World";
有使用过的构造函数。但是在这个表达式声明中
a= "Hello World";
确实使用了赋值运算符。这与赋值运算符没有任何共同之处 您声明了这个构造函数
explicit mString(const char *str);
使用函数说明符explicit
因此,在本宣言中
mString b = "Hello World";
mString b = "Hello World";
无法调用构造函数将字符串文字“Hello World”
转换为类型为mString
的对象
删除函数说明符explicit
,声明将编译
或者,您可以使用直接初始化来代替上面声明中的复制初始化,如
mString b( "Hello World" );
所以在这个宣言中,
mString b = "Hello World";
mString b = "Hello World";
有使用过的构造函数。但是在这个表达式声明中
a= "Hello World";
确实使用了赋值运算符。“…不起作用…”不是问题。你需要告诉我们它是怎么不起作用的,不是复制品。问题是一样的,但答案是不同的。行
mString b=“…”
不是赋值运算符。这是一个正在初始化的构造函数。“…不工作…”不是问题。你需要告诉我们它是怎么不起作用的,不是复制品。问题是一样的,但答案是不同的。行mString b=“…”
不是赋值运算符。这是一个初始化构造函数。非常感谢!非常感谢你!