4

我正在尝试在 c++11 中创建自己的字符串类,但我遇到了一些问题。将我的课程与 std::string 课程进行比较,我无法弄清楚如何使用

std::string.at(int) = 'a'; 方法/重载。

我在自己的类中创建了 at(int) 方法:

int at(int index)
{
    if(index <0 || index > size-1) {throw std::out_of_range("Error, index out of range");}
    return data[index];
}

如果我只使用它效果很好:

MyString.at(2);

在主文件中:

MyString = "Hello world!"; //Works fine!
MyString.at(2)='a'; //Gives, Error: expressino must be a modifiable Ivalue.

对此的任何帮助都会很棒,谢谢!

4

2 回答 2

3

至少有一个at()成员函数需要返回对char. 像这样:

char &at(std::size_t idx)
{
    return data[idx];
}

const定义函数的一个版本也是有益的:

const char &at(std::size_t idx) const
{
    return data[idx];
}

还要注意使用std::size_t(这是一种保证足够大以表示任何大小的无符号类型)。这样可以提高可移植性,并且不必检查负索引。

于 2013-10-19T21:33:33.113 回答
1

您正在返回一个整数而不是对该字符的引用,您可能想要:

char& at(int index)

当然,您需要返回正确的字符类型,但无论如何您都需要返回一个引用,以便调用者能够分配给它。

于 2013-10-19T21:33:02.517 回答