gpt4 book ai didi

c++ - 使用 operator= 从对象分配 std::string

转载 作者:行者123 更新时间:2023-11-30 01:31:20 25 4
gpt4 key购买 nike

我真的很想能够从我正在编写的 DecoratedString 对象中分配一个 std::string 对象。

class DecoratedString
{
private:
std::string m_String;
public:
DecoratedString(const std::string& initvalue)
: m_String(initvalue)
{
}

const std::string& ToString() const
{
return m_String;
}

const std::string& operator=(const DecoratedString& rhs)
{
return rhs.ToString();
}

}

我已经编写了一个单元测试来确保它有效:

void DecoratedStringTest::testAssignmentToString()
{
std::string expected("test");
DecoratedString sut(expected);
std::string actual;
actual = sut;

CPPUNIT_ASSERT_EQUAL(actual, sut.ToString());
}

但是,编译器显示错误:“actual = sut”中的“operator=”不匹配。然后它会列出标准库中重载的 operator= 选项。

为什么编译器找不到 operator= 我定义的?

编辑:

所以我想我需要一个转换 运算符,而不是赋值 运算符。非常感谢看到我正在尝试做的事情并解释我应该做什么的人。

最佳答案

您定义的运算符 = 用于将装饰字符串分配给其他装饰字符串并从该分配返回一个 std::string。

你想要的是一个成员“转换运算符”,它可以在需要时自动将装饰字符串转换为 std::string,如下所示:

operator std::string const &() const { return ToString(); }

这也会在需要时自动将装饰字符串转换为 std::string const &(即,当与 std::string 进行比较时,或将 DecoratedString 传递给接受函数的函数时)一个 std::string const &).

关于c++ - 使用 operator= 从对象分配 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com