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;
 }