2

我有一个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”的合适转换函数

4

1 回答 1

4

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

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.

于 2020-11-06T21:07:31.580 回答