【问题标题】:Overloading subscript operator not working as expected重载下标运算符未按预期工作
【发布时间】:2020-11-06 21:00:41
【问题描述】:

我有一个 String 结构,我在其上重载了下标运算符。但这似乎不起作用。

//my_string.h

struct String {
    char* Text;
    uint64 Length;

    char& operator[](int32 index); 
}
//my_string.cpp

char& String::operator[](int32 index) {
    ASSERT(index >= 0);
    return Text[index];
}
//main.cpp

String* test = string_create("Hello world");
char c = test[0];

Visual Studio 给我以下错误:

不存在从“String”到“char”的合适转换函数

【问题讨论】:

  • test 是指向字符串的指针,而不是字符串。因此 overloaded 下标运算符不适用。
  • 我建议将string_create的实现移动到String的构造函数中并完全删除该函数。

标签: c++ class operator-overloading subscript subscript-operator


【解决方案1】:

编译器发出错误,因为在这个语句中

char c = test[0];

表达式test[0] 的类型为String。

在此声明中

String* test = string_create("Hello world");

您声明了一个指针而不是字符串类型的对象。

如果不是拼写错误,那么在这种情况下你必须写

char c = ( *test )[0];

或

char c = test->operator []( 0 );

数据成员Length 的类型为uint64 看起来也很奇怪

uint64 Length;

而运算符中使用的索引类型为int32。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2022-12-18
    • 2015-05-11
    • 2019-06-20
    相关资源
    最近更新 更多