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”;'作品。 为了使其工作,我需要做些什么?

预先感谢您!

+1

_“...不起作用......_”不是问题。你需要告诉我们它是如何工作的。 –

+0

不是[从初始化构造函数和赋值运算符创建的对象之间有什么不同](https://*.com/questions/35167580/what-different-between-object-created-from-initialization-constructor-and-分配)。问题是一样的,但答案是不同的。行'mString b =“...”'不是赋值运算符。它是一个初始化构造函数。 –

这与赋值运算符没什么共同之处。

你宣布这个构造

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根本没有。不用谢。 –