在编码程序中使用自己的堆栈类-确定大小和顶部 我用C++堆栈库编写了一个编码程序。现在我尝试实现自己的堆栈类,但是我注意到堆栈库中有size()和top()成员函数。我不知道如何在没有这些函数的情况下实现我的代码,或者如何在我的类中编写这些函数以使它们与我已有的代码正常工作

在编码程序中使用自己的堆栈类-确定大小和顶部 我用C++堆栈库编写了一个编码程序。现在我尝试实现自己的堆栈类,但是我注意到堆栈库中有size()和top()成员函数。我不知道如何在没有这些函数的情况下实现我的代码,或者如何在我的类中编写这些函数以使它们与我已有的代码正常工作,c++,class,stack,lvalue,member-functions,C++,Class,Stack,Lvalue,Member Functions,以下是在myreadFileEncode(字符串文件名、堆栈和文本、字符串密码)函数中调用堆栈库函数的区域 ifstream file(fileName, ios::in | ios::binary); stack<char> temp; char ch; while (file.get(ch)){ temp.push(ch ^ cypher[temp.size() % cypher.length()]); } while (!temp.isEmpty()){ t

以下是在my
readFileEncode(字符串文件名、堆栈和文本、字符串密码)函数中调用堆栈库函数的区域

ifstream file(fileName, ios::in | ios::binary);
stack<char> temp;
char ch;

while (file.get(ch)){
    temp.push(ch ^ cypher[temp.size() % cypher.length()]);
}

while (!temp.isEmpty()){
    text.push(temp.top());
    temp.pop();
}
一切正常,但是,当我将stack.h文件附加到编码程序时,出现以下错误:

file.put(text.top())
I get“term不计算为带0个参数的函数”,并且在
text.push(temp.top())处出现相同的错误。我得到了错误,但不确定如何修复它


我还必须把
公开:
放在我班上
节点*顶端;整数堆栈大小因为我有关于他们是私人的错误。这不是我的测试程序的问题。也不确定这是否正常。

我使用以下代码来测试我的堆栈:

 int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);

cout << "size: " << s.size() << endl;
cout << "top element: " << s.topOf() << endl;

s.pop();
s.pop();

cout << "size: " << s.size() << endl;
cout << "top element: " << s.topOf() << endl;
cout << "empty: " << s.isEmpty() << endl;

s.pop();
s.pop();
s.pop();

cout << "size: " << s.size() << endl;
//cout << "top element: " << s.top() << endl;
cout << "empty: " << s.isEmpty() << endl;

system ("pause");
}
以及:

void stack::push(类型const&value){
node*temp=新节点;
if(temp==NULL){
cout next=顶部;
顶部=温度;
stackSize++;
}
模板
大小\u t堆栈::大小(空)常量{
返回堆栈大小;
}
模板
类型堆栈::topOf(void)const{
返回(*顶部)。元素;
}

还将my main中出现的所有
top()
更改为
topOf()
。不确定这是否正确,但它有效,我将接受dyp的建议,并在上交。

您的代码存在一些问题,因此我建议您在工作后将其发布以供审阅。请注意,标准库的
堆栈
不返回任何内容(
void
)在
pop
,并返回
top
的参考。您能告诉我们您尝试了什么/实现
size()
top()有什么问题吗
?@dyp嘿,我甚至不知道StackExchange有一个单独的CodeReview区域。谢谢。完成后我会在那里发布。实际上,我只让我的stack类在main中处理简单的堆栈操作。我尝试过编写我自己的大小和顶级成员函数,我已经在上面进行了更新,但我得到了一些声明ROR和定义错误,所以我显然是完全错误的。我对编写类还是相当陌生,并且很难正确声明所有成员函数。请注意,不能有两个同名的成员(重载函数除外).重命名数据成员
int size;
或成员函数
size\u t size()const;
@CharlWillia6您的程序不是“const-correct”(我想在代码复查答案中指出的问题之一)。此问题是由您的
push
函数采用非常量左值引用引起的,但您传递了一个prvalue(a值):
1
是一个值,无法更改,因此无法将其绑定到非常量引用。您可以通过使用
void push(键入const&);
将函数重命名为
top()
topOf()
,因此您应该使用这个新名称;)
text。top
指的是私有数据成员,它不是一个采用零参数的函数(而只是一个
int
)。->
text.topOf()
应该这样做。
#include <iostream>
#include <cstdlib>
#include "stack.h"

using namespace std;

int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);

cout << "size: " << s.size() << endl;
cout << "top element: " << s.topOf() << endl;

s.pop();
s.pop();

cout << "size: " << s.size() << endl;
cout << "top element: " << s.topOf() << endl;
cout << "empty: " << s.isEmpty() << endl;

s.pop();
s.pop();
s.pop();

cout << "size: " << s.size() << endl;
//cout << "top element: " << s.top() << endl;
cout << "empty: " << s.isEmpty() << endl;

system ("pause");
}
 int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);

cout << "size: " << s.size() << endl;
cout << "top element: " << s.topOf() << endl;

s.pop();
s.pop();

cout << "size: " << s.size() << endl;
cout << "top element: " << s.topOf() << endl;
cout << "empty: " << s.isEmpty() << endl;

s.pop();
s.pop();
s.pop();

cout << "size: " << s.size() << endl;
//cout << "top element: " << s.top() << endl;
cout << "empty: " << s.isEmpty() << endl;

system ("pause");
}
void push(TYPE const& value);
size_t size(void) const;
TYPE topOf(void) const;
void stack<TYPE>::push(TYPE const& value){
node *temp = new node;

if (temp == NULL){
    cout << "Push: Memory Allocation Error" << endl;
    exit(1);
}

temp->element = value;
temp->next = top;
top = temp;
stackSize++;
}

template <class TYPE>
size_t stack<TYPE>::size(void) const{
return stackSize;
}

template <class TYPE>
TYPE stack<TYPE>::topOf(void) const{
return (*top).element;
}