gpt4 book ai didi

c++ - 没有从 'Template::Memberclass' 到 'const int' 的可行转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:48 25 4
gpt4 key购买 nike

我在返回值/引用方面遇到问题。我正在编写一个模板(队列),并且 Front()函数应该从队列的前面返回元素,但我得到一个错误 -- No viable conversion from 'Queue<int>::Node' to 'const int' .当我删除 const , 我得到 Non-const lvalue reference to type 'int' cannot bind to a value of unrelated type 'Queue<int>::Node'相反,和引用/无引用的其他变体,const/no const 给我两个错误中的任何一个。我错过了什么?

#include <iostream>

using namespace std;

template <typename T>
class Queue
{
friend ostream& operator<< (ostream &, const Queue<T> & );
private:
class Node
{
friend class Queue<T>;
public:
Node(const T &t): node(t) {next = 0;}
private:
T front;
T back;
T node;
Node *next;
};
Node *front;
Node *back;
public:
Queue() : front(0), back(0) {}
~Queue();
bool Empty()
{
return front == 0;
}
T& Front()
{
if (Empty())
cout << "Очередь пуста." << endl;
else
{
T const & temp = *front; // error here
return temp;
}
}
/* ... */
};

template <class T> ostream& operator<< (ostream &, const Queue<T> & );

int main()
{
Queue<int> *queueInt = new Queue<int>;
for (int i = 0; i<10; i++)
{
queueInt->Push(i);
cout << "Pushed " << i << endl;
}
if (!queueInt->Empty())
{
queueInt->Pop();
cout << "Pop" << endl;
}
queueInt->Front();
return 0;
}

最佳答案

您的 Node 类定义没有多大意义:现在的方式是,每个节点存储 3 个数据值:frontback节点。这个类应该是一个三元组队列吗?

然而,在您的 Front() 函数中,您需要返回前端节点的“有效负载”(即返回类型为 T 的东西),而不是节点本身。像这样:

T& Front()
{
if (Empty())
cout << "Очередь пуста." << endl;
else
{
return front->node;
}
}

关于c++ - 没有从 'Template<int>::Memberclass' 到 'const int' 的可行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585286/

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