0

我正在努力在一些项目停机期间复习我的 C++,并为此创建了一个链接列表项目。在这个项目中,我想在设定的索引处返回当前值。我已经有一种方法可以做到这一点,但想通过运算符重载来解决它。

为此,我进行了必要的研究以复习并创建了以下代码(我不会让每个人都接受我的代码,只会粘贴相关部分):

T& operator[](const int index);

template<class T>
T& LinkedList<T>::operator[](const int index)
{
  try
  {
    if(!isIndexValid(index)) throw ior;

    Node<T> *temp = _head;
    for(int i=1; i<=index; i++)
    {
      temp = temp->Next;
    }

    return temp->Value;
  }
  catch(exception& e)
  {
    cout << e.what() << endl;
  }
}

在我的主要功能中,我有以下行:

int foo = list[5];

一切对我来说都很好,但是当我编译时出现以下错误:

error C2440: 'initializing' : cannot convert from 'LinkedList<T>' to 'int'

有谁知道如何解决这个问题?

谢谢!

对于那些问过的人,这是 Node 类的定义方式:

template<class T>
class Node
{
  public:
    Node();
    Node(const T value);

    T Value;
    Node<T> *Prev;
    Node<T> *Next;
};

这是我的列表变量的声明:

LinkedList<int> *list = new LinkedList<int>();
4

3 回答 3

0

您不致电您的运营商,因为它期望LinkedList<int>但您提供LinkedList<int>*. 您可以取消引用:

 T foo = (*list)[5];

或者,您将运算符定义为适用于指针类型。

于 2014-06-09T15:28:21.343 回答
-1

您的节点类是如何定义的?你返回 temp->Value;但是您的函数签名是说您将返回对您的类(T&)的引用。如果 node.Value 是一个 int,那可能是你的问题。

于 2013-07-24T19:55:49.537 回答
-2

在我的主要功能中,我有以下行:

int foo = 列表[5];

一切对我来说都很好,但是当我编译时出现以下错误:

错误 C2440:“正在初始化”:无法从“LinkedList”转换为“int”

有谁知道如何解决这个问题?

编译器错误消息说明了一切。您使用LinkedList<T>的是泛型类型,该类型由T. 因此,您不能在编译时将类型T的元素分配给 a 。int由于编译器只会LinkedList在运行时知道什么类型,你只能将它分配给一个类型的对象T

如何修复它:用 int foo = list[5];以下行替换该行。

T foo = list[5];

于 2013-07-24T19:51:30.297 回答