Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-04-2009, 10:45   #1
Tizio90
Member
 
Iscritto dal: Apr 2007
Città: Provincia di Udine
Messaggi: 88
[C++] OOP, non mi riconosce gli oggetti

Salve a tutti ragazzi, avrei un esercizio da fare per le vacanze.

Praticamente è da scrivere un programma in C++ che sia in grado di gestire un magazzino, facendo uso delle liste (quindi sia dichiarazione di un classe Nodo, e di una classe Lista). Il problema è che, in base a come faccio gli include dei due file *.h mi da errori diversi. Vi posto il codice che ho scritto fino ad adesso.

Classe Nodo
Spoiler:
Codice:
#ifndef _NODO_H
#define	_NODO_H
#define DMAX 20

class Nodo{
private:
    char articolo[DMAX];
    int quantita;
    Nodo *next;
public:
    Nodo(char [], int, Nodo *);
    char *getArticolo();
    int getQuantita();
    Nodo *getNext();
    void setArticolo(char []);
    void setQuantita(int);
    void setNext(Nodo *);
};

#endif	/* _NODO_H */


Classe Lista

Spoiler:
Codice:
#ifndef _LISTA_H
#define	_LISTA_H

class Lista{
private:
    Nodo *testa;
public:
    Lista();
    ~Lista();
    bool inserisci(char [], int);
    bool elimina(char []);
    bool ricercaArticolo(char []);
    void visualizza();
    friend Lista fusione(Lista, Lista);
};

#endif	/* _LISTA_H */


Metodi Nodo
Spoiler:
Codice:
#include "Nodo.h"
#include <iostream>

using namespace std;

Nodo::Nodo(char x[], int q, Nodo *p){
    strcpy(articolo, x);
    quantita=q;
    next=p;
}

char *Nodo::getArticolo(){
    return articolo;
}

Nodo *Nodo::getNext(){
    return next;
}

int Nodo::getQuantita(){
    return quantita;
}

void Nodo::setArticolo(char x[]){
    strcpy(articolo, x);
}

void Nodo::setQuantita(int q){
    quantita=q;
}

void Nodo::setNext(Nodo *n){
    next=n;
}


Metodi Lista
Spoiler:
Codice:
#include "Lista.h"
#include "Nodo.h"
#include <iostream>

using namespace std;

Lista::Lista(){
    testa=new Nodo('\0', 0, NULL);
}

Lista::~Lista(){
    
}

void Lista::visualizza(){
    Nodo *temp = testa;
    if(testa == NULL){
        cout << "\nLa lista e' vuota...\n\n";
    }
    else{
        while(temp != NULL){
            cout << "Nome dell' articolo:\t" << temp -> getArticolo() << endl;
            cout << "Quantita' articolo:\t" << temp -> getQuantita() << endl;
            temp = temp -> getNext();
        }
        cout << endl;
    }
}

bool Lista::elimina(char x[]){
    Nodo *temp;
    Nodo *precedente;
    bool trovato;
    if(testa == NULL){
        cout << "\nLista vuota.\n\n";
    }
    else{
        trovato = false;
        precedente = NULL;
        temp = testa;
        if(strcmp(testa -> getArticolo(),x) == 0){
            testa = testa -> getNext();
            delete temp;
            trovato = true;
        }
        else{
            while((trovato == false) && (temp != NULL)){
                if(strcmp(temp -> getArticolo(),x) == 0){
                    trovato = true;
                    precedente ->setNext(temp -> getNext());
                    delete temp;
                }
                else{
                    precedente = temp;
                    temp = temp -> getNext();
                }
            }
            if(trovato == false)
                cout << "\nElemento non presente nella lista.\n\n";
            cout << "\nEliminazione avvenuta con successo.\n\n";
        }
    }
}

bool Lista::inserisci(char x[], int q){
    Nodo *nuovo;
    Nodo *temp;
    Nodo *precedente;
    nuovo -> setArticolo(x);
    nuovo ->setQuantita(q);
    nuovo ->setNext(NULL);
    if(testa == NULL){
        testa = new Nodo(x, q, NULL);
    }
    else{
        if(strcmp(testa -> getArticolo(),nuovo -> getArticolo()) > 0){
            temp = testa;
            testa = nuovo;
            testa -> setNext(temp);
        }
        else{
            temp = testa;
            while((temp != NULL) && (strcmp(nuovo -> getArticolo(),temp -> getArticolo())) > 0){
                precedente = temp;
                temp = temp -> getNext();
            }
            nuovo -> setNext(temp);
            precedente -> setNext(nuovo);
        }
    }
}

bool Lista::ricercaArticolo(char x[]){
    Nodo *temp;
    Nodo *precedente;
    bool trovato;
    if(testa == NULL){
        cout << "\nLista vuota.\n\n";
    }
    else{
        trovato = false;
        precedente = NULL;
        temp = testa;
        if(strcmp(testa -> getArticolo(),x) == 0){
            testa = testa -> getNext();
            delete temp;
            trovato = true;
        }
        else{
            while((trovato == false) && (temp != NULL)){
                if(strcmp(temp -> getArticolo(),x) == 0){
                    trovato = true;
                    precedente -> setNext(temp -> getNext());
                    delete temp;
                }
                else{
                    precedente = temp;
                    temp = temp -> getNext();
                }
            }
            if(trovato == false)
                cout << "\nArticolo presente nella lista.\n\n";
            cout << "\nEliminazione avvenuta con successo.\n\n";
        }
    }
}


Main
Spoiler:
Codice:
#include <iostream>
#include "Lista.h"
#include "Nodo.h"

using namespace std;
/*
 * 
 */
int main() {
    char scelta;

    char articolo;
    int quantita;

    bool test;

    Lista mag_uno();
    Lista mag_due();

    mag_uno=new Lista();
    mag_due=new Lista();

    do{
        cout<<"1. Carica articoli nel primo magazzino.\n";
        cout<<"2. Carica articoli nel secondo magazzino.\n";
        cout<<"3. Scarica articolo dal primo magazzino.\n";
        cout<<"4. Scarica articolo dal secondo magazzino.\n";
        cout<<"5. Visualizza articoli presenti nel primo magazzino.\n";
        cout<<"6. Visualizza articoli presenti nel secondo magazzino.\n";
        cout<<"7. Ricerca articolo nel primo magazzino.\n";
        cout<<"8. Ricerca articolo nel secondo magazzino.\n";
        cout<<"9. Fondi i due magazzini.\n";

        cout<<"0. Uscita.\n\n";

        cout<<"Inserisci la tua scelta: ";
        cin>>scelta;
        
        switch(scelta){
            case '1':{
                cout<<"Nome dell' articolo: ";
                cin>>articolo;
                cout<<"Quantita': ";
                cin>>quantita;
                test=mag_uno->inserisci(articolo, quantita);
            }break;
            case '2':{
                cout<<"Nome dell' articolo: ";
                cin>>articolo;
                cout<<"Quantita': ";
                cin>>quantita;
                test=mag_due->inserisci(articolo, quantita);
            }break;
            case '3':{
                cout<<"Nome articolo da eliminare: ";
                cin>>articolo;
                cout<<"Quantità da eliminare: ";
                cin>>quantita;
                test=mag_uno->elimina(articolo, quantita);
            }break;
            case '4':{
                cout<<"Nome articolo da eliminare: ";
                cin>>articolo;
                cout<<"Quantità da eliminare: ";
                cin>>quantita;
                test=mag_due->elimina(articolo, quantita);
            }break;
            case '5':{
                mag_uno->visualizza();
            }break;
            case '6':{
                mag_due->visualizza();
            }break;
            case '7':{
                cout<<"Nome articolo da ricercare: ";
                cin>>articolo;
                test=mag_uno->ricercaArticolo(articolo);
                if(test==true)
                    cout<<"Elemento presente.\n";
                cout<<"Elemento non presente.\n";
            }break;
            case '8':{
                cout<<"Nome articolo da ricercare: ";
                cin>>articolo;
                test=mag_due->ricercaArticolo(articolo);
                if(test==true)
                    cout<<"Elemento presente.\n";
                cout<<"Elemento non presente.\n";
            }break;
            case '9':{
                // Fusione delle liste.
            }break;
            case '0':{
                scelta='u';
            }break;
            default:{
                cout<<"Valore non consentito.\n";
                system("PAUSE");
                system("cls");
            }break;
        }
        system("PAUSE");
        system("cls");
    }while(scelta!='u');

    return (EXIT_SUCCESS);
}


Per scrivere, compilare ed eseguire il codice uso Netbeans 6.5.
Tizio90 è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2009, 10:52   #2
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
Se magari posti anche gli errori che ottieni dalla compilazione... cosi' ci si focalizza su quelli... senza dover scorrere tutto il codice, che non sono proprio 2 righe quelle che hai postato ...

Anche se nel file "classe lista"... c'andrebbe una dichiarazione...

class Nodo;

... prima della classe Lista

Ultima modifica di BrutPitt : 11-04-2009 alle 10:56.
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2009, 00:25   #3
Tizio90
Member
 
Iscritto dal: Apr 2007
Città: Provincia di Udine
Messaggi: 88
Allora, se nell' implementazione dei metodi della classe Lista scrivo:

Codice:
#include "Lista.h"
#include "Nodo.h"
Ma da i seguenti errori, riferiti a quel file:

Codice:
In file included from metodiLista.cpp:1:
Lista.h:15: error: ISO C++ forbids declaration of `Nodo' with no type
Lista.h:15: error: expected `;' before '*' token
metodiLista.cpp: In constructor `Lista::Lista()':
metodiLista.cpp:8: error: `testa' undeclared (first use this function)
metodiLista.cpp:8: error: (Each undeclared identifier is reported only once for each function it appears in.)
metodiLista.cpp: In member function `void Lista::visualizza()':
metodiLista.cpp:16: error: `testa' undeclared (first use this function)
metodiLista.cpp: In member function `bool Lista::elimina(char*)':
metodiLista.cpp:34: error: `testa' undeclared (first use this function)
metodiLista.cpp: In member function `bool Lista::inserisci(char*, int)':
metodiLista.cpp:72: error: `testa' undeclared (first use this function)
metodiLista.cpp: In member function `bool Lista::ricercaArticolo(char*)':
metodiLista.cpp:97: error: `testa' undeclared (first use this function)
C:\Dev-Cpp\bin\make.exe: *** [build/Debug/Cygwin-Windows/metodiLista.o] Error 1
Se invece scrivo:

Codice:
#include "Nodo.h"
#include "Lista.h"
Gli errori, in questo caso però riferiti al main, sono questi:

Codice:
In file included from main.cpp:9:
Lista.h:15: error: ISO C++ forbids declaration of `Nodo' with no type
Lista.h:15: error: expected `;' before '*' token
main.cpp: In function `int main()':
main.cpp:27: error: assignment of function `Lista mag_uno()'
main.cpp:27: error: cannot convert `Lista*' to `Lista ()()' in assignment
main.cpp:28: error: assignment of function `Lista mag_due()'
main.cpp:28: error: cannot convert `Lista*' to `Lista ()()' in assignment
main.cpp:52: error: request for member `inserisci' in `mag_uno', which is of non-class type `Lista ()()'
main.cpp:59: error: request for member `inserisci' in `mag_due', which is of non-class type `Lista ()()'
main.cpp:66: error: request for member `elimina' in `mag_uno', which is of non-class type `Lista ()()'
main.cpp:73: error: request for member `elimina' in `mag_due', which is of non-class type `Lista ()()'
main.cpp:76: error: request for member `visualizza' in `mag_uno', which is of non-class type `Lista ()()'
main.cpp:79: error: request for member `visualizza' in `mag_due', which is of non-class type `Lista ()()'
main.cpp:84: error: request for member `ricercaArticolo' in `mag_uno', which is of non-class type `Lista ()()'
main.cpp:92: error: request for member `ricercaArticolo' in `mag_due', which is of non-class type `Lista ()()'
make.exe[2]: *** [build/Debug/Cygwin-Windows/main.o] Error 1
Buona Pasqua comunque!
Tizio90 è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2009, 11:52   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Devi includere Nodo.h in Lista.h non in Lista.cpp
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2009, 12:41   #5
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
Nel primo gruppo di errori il problema e' la sequenza degli include

Nel secondo gruppo di errori... UN problema e' sicuramente qui:

Codice:
    Lista mag_uno();
    Lista mag_due();

    mag_uno=new Lista();
    mag_due=new Lista();
prova:

Lista *mag_uno = new Lista;
Lista *mag_due = new Lista;

(per liberare la memoria... "delete")

O alternativamente basta solo:

Lista mag_uno;
Lista mag_due;


ma poi devi usare l'operatore "." al posto dell'operatore "->"



Per quanto riguarda gli include, invece, o metti la dichiarazione in list.h:

class Node;

e includi entrambi i .h nei files main.cpp e list.cpp
(come scrivevo... e a quel punto l'ordine non ha piu' importanza)


Oppure inserisci in list.h:
#include <node.h>

e includi solo list.h nei files main.cpp e list.cpp

Ultima modifica di BrutPitt : 12-04-2009 alle 12:59.
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Amazon piena di offerte, ma queste sono ...
Wi-Fi veloce: router e mesh Huawei super...
La retrocompatibilità di Project ...
InvestCloud chiude la sede italiana di M...
TSMC resta irraggiungibile, ma Samsung r...
Il futuro di Dacia: ecco Striker, ma arr...
LG e DataVolt avviano una partnership: s...
Google, una modifica del kernel Android ...
A casa di Givi Bike per scoprire la line...
Il nuovo Samsung Galaxy S26 Ultra si pu&...
Google Play Games sfida Steam: demo, com...
HP Victus 15: un notebook gaming potente...
HPE al MWC 2026: la rete come spina dors...
Monitor da ufficio e gaming a prezzi ass...
Silent Hill 2 Remake è un trionfo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v