Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Esercizio Stack con namespace

    Devo implementare uno stack usando un namespace Strutture dati, perņ ho errori di compilazione e non so come risolverli.

    Questo č l' header:

    codice:
    /*
     * 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:

    codice:
    /*
     * 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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usi i puntatori.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ok adesso compila, scrivendo:

    codice:
    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ģ:

    codice:
    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:

    codice:
    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?

    codice:
    /*
     * 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()
    {
    	
    
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    codice:
    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++
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    PS: questa istruzione
    codice:
    myStack[top]=NULL;
    avrebbe sollevato un errore anche in Java... essendo myStack un array di interi, non di oggetti.


    Ciao.
    "Perchč spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Si avete ragione, ho corretto comunque nell' ultimo post del codice, unico problema non riesco a costruire gli oggetti...scrivendo:

    codice:
    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?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma hai letto il mio ultimo post?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.