C++ 'da yapıcılar kullanarak yığınları uygulamaya çalışıyorum. Yığında bir elemanı itmek için harici bir işlev kullanmam gerekiyor, ancak düzgün çalışmıyor gibi görünüyor. Psikheeksüel fonksiyon, itme fonksiyonunu "girer" gibi görünür, fakat ind değerini artırmaz, bu yüzden yığının üzerine yeni bir eleman eklemez (örneğin, kodumda, tüm pushxternals, üzerine bir değer atmaya çalışacaktır) aynı indeks, s.push - ind == 2 tarafından kullanılan sonuncu. Neyi yanlış yaptığımı bilmiyorum.Dış işlev kullanarak yığın itme
Oh, sadece sınıf kodunu değiştirmem gerekiyor - pushexternal ve main değişmeden kalmalıdır.
#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;
}
Sonuçlar:
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
Teşekkür ederim, referansla düzgün şekilde çalışıyor. Ancak, bu, pushexternal fonksiyonu değiştirmemizi gerektirir (void pushexternal (Stack & s, int a)). Bu görevde kullandığım kitap, pushexternal ve ana işlevlerin değişmemesini ve sadece sınıfımın kodunu değiştirmemi istiyor. Henüz denemediğimden emin değilim, ama bu durumda bir kopya oluşturucu yardımı mı kullanacak? – drakerc
Bir kopya oluşturucu, bir nesneyi mevcut bir nesneden gelen verilerle başlatmak için kullanılır. Bu, fonksiyonunuzun Stack fonksiyon parametresinden aldığı ve üzerinde çalıştığı için size yardımcı olmaz. Tahminim, örnek yanlış ya da kitap "hata" yı bulmanızı istiyor. – Aleksandar