转换运算符导致编译错误

时间:2019-02-04 16:54:27

标签: c++ casting stdstring

我已经实现了一个名为Str的类似字符串的类,并希望将转换添加为bool类型,以便将Str对象用作条件。

Str类非常简单,它依赖于另一个名为Vec的模板类,该模板类与STL矢量类相似。下面我复制了定义的主要部分

let foo: P = Foo()
foo.method()              // Foo implementation

一切正常,除了现在,如果我尝试执行以下操作:

class Str
{

    friend std::istream& operator>>(std::istream&, Str&);

private:
    Vec<char> data;

public:
    typedef Vec<char>::size_type size_type;
    typedef Vec<char>::iterator iterator;
    typedef Vec<char>::const_iterator const_iterator;

    iterator begin() { return data.begin(); }
    const_iterator begin() const { return data.begin(); }
    iterator end() { return data.end(); }
    const_iterator end() const { return data.end(); }

    //[...]

    char& operator[](size_type i) { return data[i]; }
    const char& operator[](size_type i) const { return data[i]; }
    Str& operator+=(const Str& s)
    {
        std::copy(s.data.begin(), s.data.end(), std::back_inserter(data));
        return *this;
    }

};

Str::operator bool() const
{
    if (data.size() > 0)
        return true;
    return false;
}

然后我收到一个编译错误,说“'operator +':2个重载具有相似的转换,可能是'Str运算符+(const Str&,const Str&)'或'内置的C ++运算符+(const char [ 8],int)'。

我了解错误的原因,但不确定如何解决。我该如何解决?

谢谢。

编辑:下面,我添加了一个最小,完整和可验证的示例:

Str greeting = "Hello, " + name + "!";

0 个答案:

没有答案