C++ 运算符=不';在自定义字符串类中无法正常工作

C++ 运算符=不';在自定义字符串类中无法正常工作,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

我正在尝试使用std::vector创建一个自定义字符串类

请看下面我的代码

#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=“…”
不是赋值运算符。这是一个初始化构造函数。非常感谢!非常感谢你!