PDA

Visualizza la versione completa : [C++] Esercizio: stack con namespace


Darčios89
21-11-2011, 20:35
Devo implementare uno stack usando un namespace Strutture dati, perņ ho errori di compilazione e non so come risolverli.

Questo č l' header:


/*
* Stack.h
*
* Created on: 15/nov/2011
* Author: Dario89
*/

#ifndef STACK_H_
#define STACK_H_

namespace StruttureDati {

class Stack {

public:
Stack();

public:
~Stack();

bool push(int a);
bool pop(int &a);
};

} /* namespace StruttureDati */
#endif /* STACK_H_ */


Questo il cpp:


/*
* Stack.cpp
*
* Created on: 15/nov/2011
* Author: Dario89
*/

#include "Stack.h"
#include <stdio.h>
#include <iostream>
using namespace std;

namespace StruttureDati {

int myStack[];
int size;
#define CAPACITY 100
int top;



Stack::Stack() {

size=0;
top=0;
myStack=new int[CAPACITY];
// TODO Auto-generated constructor stub
}

bool push(int a)
{

if(size<CAPACITY){
myStack[size++]=a;
top=size;
return true;
}

printf("Error!!! Stack is full!");
return false;
}


bool pop(int &a)
{
if(size!=0)
{
myStack[a]=0;
return true;
}

printf("Error!!! Stack is empty!");
return false;
}

int NumElements(){
return size;
}


Stack::~Stack() {
//delete [] myStack;
// TODO Auto-generated destructor stub
}

} /* namespace StruttureDati */


int main()
{
/* StruttreDati pila=new StruttureDati();
int number;
cout << "Inserisci il numero di elementi da inserire nello stack" << endl;
cin >> number;*/


}


L' errore che ho č il fatto che dichiarando l' array non specifico la dimensione, io sono abituato in Java e una cosa come quella si puņ fare, in questo caso come dovrei correggere?

oregon
22-11-2011, 10:09
Usi i puntatori.

Darčios89
22-11-2011, 13:19
Ok adesso compila, scrivendo:


namespace StruttureDati {

int *myStack;
int size;
#define CAPACITY 100
int top;



Stack::Stack() {

size=0;
top=0;
myStack=new int[CAPACITY];
// TODO Auto-generated constructor stub
}

Purtroppo non ho ben capito come implementare il metodo:

bool pop(int &a).

In Java mi basta assegnare ad una variabile il valore null, qui non lo posso fare e dovrei sempre sfruttare i puntatori...solo che esattamente non ho capito come fare a puntare alla locazione &a.

Tipo scrivendo cosģ:


bool pop(int &a)
{
if(&top==NULL)
{
printf("Error!!! Stack is empty!");
return false;
}
myStack[top]=NULL;

if(size!=0)
{
size--;
top=size;
}
return true;
}


Mi dą errore su:


myStack[top]=NULL;

Come mai? Essendo l' array un puntatore, in questo modo non assegno null al puntatore di una locazione dell' array?

Inoltre non riesco a costruire gli oggetti, per il fatto di avere un namespace, cosa cambia nella costruzione?


Come andrebbe questa versione secondo te?


/*
* Stack.cpp
*
* Created on: 15/nov/2011
* Author: Dario89
*/

#include "Stack.h"
#include <stdio.h>
#include <iostream>
using namespace std;

namespace StruttureDati {

int *myStack;
int size;
#define CAPACITY 100
int top;



Stack::Stack() {

size=0;
top=-1;
myStack=new int[CAPACITY];
// TODO Auto-generated constructor stub
}

bool push(int a)
{

if(size<CAPACITY){
myStack[size++]=a;
top++;
return true;
}

printf("Error!!! Stack is full!");
return false;
}


bool pop(int &a)
{
if(top==-1)
{
printf("Error!!! Stack is empty!");
return false;
}
myStack[top--]=0;
size--;
return true;
}

Stack::~Stack() {
delete [] myStack;
// TODO Auto-generated destructor stub
}

} /* namespace StruttureDati */


int main()
{


}

oregon
22-11-2011, 13:47
using namespace StruttureDati;

int main()
{
Stack s;

...



myStack[top] č un elemento intero del vettore, non č un puntatore. Il puntatore č myStack

Cosa vuoi porre uguale a NULL?

P.S. Dimentica il linguaggio con cui programmavi in precedenza e concentrati sulle regole di C++

LeleFT
22-11-2011, 15:58
PS: questa istruzione


myStack[top]=NULL;


avrebbe sollevato un errore anche in Java... essendo myStack un array di interi, non di oggetti.


Ciao. :ciauz:

Darčios89
22-11-2011, 23:17
Si avete ragione, ho corretto comunque nell' ultimo post del codice, unico problema non riesco a costruire gli oggetti...scrivendo:


Stack pila;

mi dą errori....dicendo che non trova la classe Stack, il problema č dato dai namespace che non ho ben capito, ma come faccio qui a costruire un oggetto?

oregon
23-11-2011, 09:56
Ma hai letto il mio ultimo post?

Loading