C++ 模板成员问题?
当我试图编译以下代码时,我发现错误,请告诉我:C++ 模板成员问题?,c++,templates,C++,Templates,当我试图编译以下代码时,我发现错误,请告诉我: “isEmpty”:不是“\u堆栈”的成员 编译类模板成员函数“void QueueS::enqueue(const T&)”时出错 #包括 #包括 使用名称空间std; 模板 类栈:公共栈{ 公众: T pop(){ T tmp=stack::top(); stack::pop(); 返回tmp; } }; 模板 类队列{ 公众: 队列(){} bool isEmpty()常量{ } 无效排队(常数T&el){ 而(!output.isEmpt
- “isEmpty”:不是“\u堆栈”的成员
- 编译类模板成员函数“void QueueS::enqueue(const T&)”时出错
#包括 #包括 使用名称空间std; 模板 类栈:公共栈{ 公众: T pop(){ T tmp=stack::top(); stack::pop(); 返回tmp; } }; 模板 类队列{ 公众: 队列(){} bool isEmpty()常量{ } 无效排队(常数T&el){ 而(!output.isEmpty()){ input.push(output.pop()); } 输入。推送(el); } 私人: _堆栈输入; _堆栈输出; };
我不知道发生了什么事。有人能提供帮助吗?我显然还没有实现isEmpty。我想知道这是否会有效果。你想做什么? 这是行不通的,因为isEnpty是类堆栈的成员函数。 可以通过将函数isEmpty添加到_Stack类中来解决第一个问题 像这样:
#include <iostream>
#include <stack>
using namespace std;
template <class T>
class _Stack : public stack<T>
{
public:
T pop(){
T tmp=stack::top();
stack::pop();
return tmp;
}
bool isEmpty() const{
return stack::empty();
}
};
template <class T>
class QueueS {
public:
QueueS(){}
bool isEmpty() const{
}
void enqueue(const T& el){
while( !output.isEmpty()) {
input.push(output.pop());
}
input.push(el);
}
private:
_Stack<T> input;
_Stack<T> output;
};
int main()
{
_Stack<int> sk;
sk.isEmpty();
QueueS<int> qu;
qu.enqueue(4);
return 1;
}
#包括
#包括
使用名称空间std;
模板
类栈:公共栈
{
公众:
T pop(){
T tmp=stack::top();
stack::pop();
返回tmp;
}
bool isEmpty()常量{
返回堆栈::empty();
}
};
模板
类队列{
公众:
队列(){}
bool isEmpty()常量{
}
无效排队(常数T&el){
而(!output.isEmpty()){
input.push(output.pop());
}
输入。推送(el);
}
私人:
_堆栈输入;
_堆栈输出;
};
int main()
{
_堆栈sk;
sk.isEmpty();
曲先生;
排队(4);
返回1;
}
一个问题是,“isEmpty”:不是“\u Stack”的成员。
。这与模板无关。您认为stack::top()
返回什么top
是一个成员函数,应该从std::stack
的实例中调用它。这与您的问题无关,但仍然是:您不应该使用以下划线和大写字母开头的标识符(例如\u stack
)。请参阅以获取相关的SO帖子。更好的缩进将有助于查看isEmpty
在\u堆栈
模板之外明确定义。对不起;缩进在我自己的代码中更清晰,但我总是很难在给定的代码括号中粘贴一些东西。我只是想用它作为检查。由于我的堆栈是私有的,所以我将尝试使用函数(一旦编写)作为访问它们的中间人。但是,由于它们是在不同的类中声明的,所以我是否最好只使用库的.empty()检查?我仍然需要对象的实例来进行更改,不是吗?我“get use of class template requires template Arguments list”(获取类模板的使用需要模板参数列表),我相信它就是这么说的。我不太清楚你的意思,也许你会添加main或导致错误的行。行return std::empty()给出了错误使用class template requires template Arguments list。我仍然不知道你的意思,我用一条主线重新编辑了这篇文章,效果很好,问题出在哪里?
#include <iostream>
#include <stack>
using namespace std;
template <class T>
class _Stack : public stack<T>
{
public:
T pop(){
T tmp=stack::top();
stack::pop();
return tmp;
}
bool isEmpty() const{
return stack::empty();
}
};
template <class T>
class QueueS {
public:
QueueS(){}
bool isEmpty() const{
}
void enqueue(const T& el){
while( !output.isEmpty()) {
input.push(output.pop());
}
input.push(el);
}
private:
_Stack<T> input;
_Stack<T> output;
};
int main()
{
_Stack<int> sk;
sk.isEmpty();
QueueS<int> qu;
qu.enqueue(4);
return 1;
}