我真的很想能够从我正在编写的 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/