Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载下标运算符未按预期工作_C++_Class_Operator Overloading_Subscript_Subscript Operator - Fatal编程技术网

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

C++ 重载下标运算符未按预期工作,c++,class,operator-overloading,subscript,subscript-operator,C++,Class,Operator Overloading,Subscript,Subscript Operator,我有一个Stringstruct,它重载了下标操作符。但它似乎不起作用 //my_string.h 结构字符串{ 字符*文本; uint64长度; 字符和运算符[](int32索引); } //my_string.cpp 字符和字符串::运算符[](int32索引){ 断言(索引>=0); 返回文本[索引]; } //main.cpp String*test=String_create(“Hello world”); 字符c=测试[0]; Visual Studio向我提供了以下错误: 不

我有一个
String
struct,它重载了下标操作符。但它似乎不起作用

//my_string.h
结构字符串{
字符*文本;
uint64长度;
字符和运算符[](int32索引);
}
//my_string.cpp
字符和字符串::运算符[](int32索引){
断言(索引>=0);
返回文本[索引];
}
//main.cpp
String*test=String_create(“Hello world”);
字符c=测试[0];
Visual Studio向我提供了以下错误:

不存在从“字符串”到“字符”的适当转换函数


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

char c = test[0];
表达式
test[0]
的类型为
String

在本声明中

String* test = string_create("Hello world");
您声明了一个指针,而不是字符串类型的对象

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

char c = ( *test )[0];

数据成员
Length
的类型为
uint64

uint64 Length;

虽然运算符中使用的索引的类型为
int32

test
,但它是指向字符串的指针,而不是字符串。因此,重载的下标运算符不适用。我建议将
string\u create
的实现移动到
string
的构造函数中,并完全删除该函数。
uint64 Length;