重载下标运算符未按预期工作

Overloading subscript operator not working as expected

我有一个 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 给我以下错误:

no suitable conversion function from "String" to "char" exists

编译器出错,因为在这条语句中

char c = test[0];

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

在此声明中

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

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

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

char c = ( *test )[0];

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

数据成员 Length 的类型 uint64

看起来也很奇怪
uint64 Length;

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