我正在努力在一些项目停机期间刷新我的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>();
答案 0 :(得分:0)
您无法致电您的运营商,因为它预计会LinkedList<int>
,但您提供LinkedList<int>*
。
你可以取消引用:
T foo = (*list)[5];
或者,您可以将运算符定义为适用于指针类型。
答案 1 :(得分:-1)
您的节点类是如何定义的?你返回temp-&gt; Value; 但是您的功能签名表示您将返回对您的班级(T&amp;)的引用。如果是node.Value 是一个int,这可能是你的问题。
答案 2 :(得分:-2)
在我的主要功能中,我有以下几行:
int foo = list [5];
一切对我来说都很好,但是当我编译时,我得到以下错误:
错误C2440:'初始化':无法从'LinkedList'转换为'int'
有没有人有任何想法如何解决这个问题?
编译器错误消息说明了一切。您使用LinkedList<T>
这是一种通用类型,类型由T
表示。因此,您无法在编译时将T
类型的元素分配给int
。由于编译器只会在运行时知道LinkedList
的类型,因此您只能将其分配给T
如何解决问题:通过以下行替换行int foo = list[5];
。
T foo = list[5];