Witajcie! Po raz kolejny mam problem z wykonaniem jednego z ćwiczeń, jego treść brzmi:
[quote]
Utwórz nową wersję klasy Stack, zawierającą domyślny konstruktor, a także drugi konstruktor, przyjmujący jako argumenty tablicę wskaźników do obiektów oraz wielkość tablicy. Konstruktor powinien przejść przez tę tablicę, umieszczając na stosie każdy z zawartych w niej wskaźników. Przetestuj klasę, używając tablicę łańcuchów
[/quote]
Tutaj moja wariacja (niedziałająca) na ten temat:
main:
#include "Stack.h"
#include "require.h"
#include <fstream>
#include <iostream>
#include <string>
#include "Hen.h"
#include <cstdio>
using namespace std;
int main(void) {
string tab[4]{"Wlazl", "kotek", "na" ,"plotek"};
void * ptab[4];
for(int i=0; i<4; i++)
ptab[i]=(void*)&tab[i];
cout<<"ETAP1COMPL\n\n\n";
Stack container(ptab, 4);
cout<<"ETAP2COMPL\n\n\n";
string * sp;
while((sp=(string*)container.pop())!=0)
{
cout<<*sp<<" ";
delete sp;
}
return 0;
}
stack.cpp:
#include "Stack.h"
#include "require.h"
#include <iostream>
using namespace std;
void
Stack::Link::initialize(void* dat, Link* nxt) {
data = dat;
next = nxt;
}
Stack::Stack() { head = 0; }
Stack::Stack(void * tab[], int sizer)
{
head=0;
for(;sizer>0; sizer--){
push(new void * (tab[sizer]));
cout<<1;
}
}
void Stack::push(void* dat) {
Link* newLink = new Link;
newLink->initialize(dat, head);
head = newLink;
}
void* Stack::peek() {
require(head != 0, "Stack empty");
return head->data;
}
void* Stack::pop() {
if(head == 0) return 0;
void* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;
}
Stack::~Stack() {
require(head == 0, "Stack not empty");
}
stack.h
#ifndef STACK2_H
#define STACK2_H
class Stack {
struct Link {
void* data;
Link* next;
void initialize(void* dat, Link* nxt);
}* head;
public:
Stack();
Stack(void * tab[], int sizer);
void push(void* dat);
void* peek();
void* pop();
~Stack();
};
#endif
Gdzie popełniłem błąd i dlaczego?
Z góry dziękuję za pomoc