Ich versuche Stacks mit Konstruktoren in C++ zu implementieren. Ich muss eine externe Funktion verwenden, um ein Element auf den Stapel zu schieben, aber es scheint nicht richtig zu funktionieren. Die pushexternale Funktion scheint die Push-Funktion zu "betreten", erhöht aber nicht den ind-Wert, daher fügt sie dem Stack kein neues Element hinzu (zum Beispiel versuchen in meinem Code alle Pushxternals einen Wert auf zu schieben) derselbe Index, der letzte von s.push - ind == 2). Ich bin mir nicht sicher, was ich falsch mache.Stack Push mit externer Funktion
Oh, ich soll nur den Klassencode ändern - die Pushexternal und Main müssen unverändert bleiben.
#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;
}
Ergebnisse:
Added 0 to 0
Added 1 to 1
Added 2 to 2
Added 3 to 3
Added 4 to 3
Added 5 to 3
Top: 2
Vielen Dank, die Weitergabe funktioniert einwandfrei. Allerdings muss ich die pushexternale Funktion ändern (void pushexternal (Stack & s, int a)). In dieser Aufgabe möchte ich, dass das Buch die pushexternalen und Hauptfunktionen unverändert lässt und nur den Code meiner Klasse ändert. Ich bin mir nicht sicher, wie ich es noch nicht ausprobiert habe, aber würde ich in diesem Fall eine Kopierhilfe verwenden? – drakerc
Ein Kopierkonstruktor wird verwendet, um ein Objekt mit Daten von einem bereits vorhandenen Objekt zu initialisieren. Das würde Ihnen nicht helfen, da Ihre Funktion Stack vom Funktionsparameter übernimmt und darauf operiert. Ich schätze, das Beispiel ist entweder falsch oder das Buch möchte, dass Sie den "Fehler" finden. – Aleksandar