Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用外部函数的堆栈推送 我试图用C++中的构造函数实现栈。我需要使用一个外部函数将元素推送到堆栈上,但是,它似乎不能正常工作。pushexternal函数似乎“输入”了push函数,但它不会增加ind值,因此它不会向堆栈中添加新元素(例如,在我的代码中,所有PushExternals都会尝试将值推送到同一个索引上,最后一个索引由s.push-ind==2使用)。我不确定我做错了什么_C++_Class_Stack - Fatal编程技术网

使用外部函数的堆栈推送 我试图用C++中的构造函数实现栈。我需要使用一个外部函数将元素推送到堆栈上,但是,它似乎不能正常工作。pushexternal函数似乎“输入”了push函数,但它不会增加ind值,因此它不会向堆栈中添加新元素(例如,在我的代码中,所有PushExternals都会尝试将值推送到同一个索引上,最后一个索引由s.push-ind==2使用)。我不确定我做错了什么

使用外部函数的堆栈推送 我试图用C++中的构造函数实现栈。我需要使用一个外部函数将元素推送到堆栈上,但是,它似乎不能正常工作。pushexternal函数似乎“输入”了push函数,但它不会增加ind值,因此它不会向堆栈中添加新元素(例如,在我的代码中,所有PushExternals都会尝试将值推送到同一个索引上,最后一个索引由s.push-ind==2使用)。我不确定我做错了什么,c++,class,stack,C++,Class,Stack,哦,我只需要修改类代码-pushexternal和main必须保持不变 #include <iostream> using namespace std; class Stack { public: int ind; int * arr; Stack() { arr = new int[25]; ind = -1; } ~Stack() { delete [] arr; } void push(int val) { arr[

哦,我只需要修改类代码-pushexternal和main必须保持不变

#include <iostream>
using namespace std;

class Stack {
    public:
    int ind;
    int * arr;

Stack()
{
    arr = new int[25];
    ind = -1;
}
~Stack()
{
    delete [] arr;
}

void push(int val)
{
    arr[++ind] = val;
    cout << "Added " << arr[ind] << " to " << ind << endl;
}

void top()
{
    cout << "Last: " << arr[ind];
}
};

void pushexternal(Stack s, int a) {
    s.push(a);
}

int main() {
    Stack s;
    s.push(0);
    s.push(1);
    s.push(2);
    pushexternal(s, 3);
    pushexternal(s, 4);
    pushexternal(s, 5);
    return 0;
}
接收堆栈作为参数,这意味着它接收的对象是对象的副本

您应该对引用进行操作,这样您就不会发送要操纵的对象的副本,而是发送对象的引用,从而操纵原始对象

void pushexternal(Stack s, int a) {
    s.push(a);
}
您正在通过值而不是引用将
堆栈
对象传递到此函数。这将生成原始
堆栈
对象的临时副本,因此原始对象保持不变。更不用说这会导致内存损坏,因为违反了
RAII
原则


我想,幸运的是,您的代码没有出现错误。

谢谢,通过引用传递是正确的。但是,它需要我更改pushexternal函数(void pushexternal(Stack&s,inta))。在这个任务中,我正在使用的书希望我保持pushexternal和main函数不变,只更改类的代码。我不确定,因为我还没有尝试过,但在这种情况下使用副本构造函数会有帮助吗?副本构造函数用于使用来自已存在对象的数据初始化对象。这对您没有帮助,因为您的函数从函数参数获取堆栈并对其进行操作。我的猜测是,这个例子要么是错的,要么这本书希望你找出“错误”。
void pushexternal(Stack s, int a) {
    s.push(a);
}
void pushexternal(Stack s, int a) {
    s.push(a);
}