gpt4 book ai didi

C++ []运算符重载问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:54 26 4
gpt4 key购买 nike

我对 C++ 还是个新手,所以我每天都会遇到新问题。

今天轮到 [] 运算符(operator)了:

我正在为自己创建一个新的通用 List 类,因为我不太喜欢 std 类。我试图赋予它 C# 的 Collections.Generic List 温暖而模糊的外观,所以我确实希望能够通过索引访问元素。切入正题:

从模板中提取:

T& operator[](int offset)
{
int translateVal = offset - cursorPos;

MoveCursor(translateVal);

return cursor->value;
}

const T& operator[](int offset) const
{
int translateVal = offset - cursorPos;

MoveCursor(translateVal);

return cursor->value;
}

这是运算符的代码。该模板使用"template",据我在一些教程中看到的那样,这是进行运算符重载的正确方法。

然而,当我尝试通过索引访问时,例如:

Collections::List<int> *myList;
myList = new Collections::List<int>();
myList->SetCapacity(11);
myList->Add(4);
myList->Add(10);
int a = myList[0];

我明白了

    no suitable conversion function from "Collections::List<int>" to "int" exists

错误,指的是“int a = myList[0]”行。基本上“myList[0]”类型仍然是“Collections::List”,尽管它应该只是 int。怎么会?

最佳答案

myList是一个指针 myList[0]不调用 operator[] , 它返回 Collections::List<int>* .你要的是(*myList)[0] .或者更好,Collections::List<int>& myRef = *myList;然后使用 myRef[0] (其他选项不是在堆上为 myList 分配内存,您可以使用 Collections::List<int> myList 在堆栈上创建它,然后在其上使用 . 运算符)。

关于C++ []运算符重载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com