重载下标运算符未按预期工作
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
.
我有一个 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
.