Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air combina diverse carte molto interessanti: un OLED PaperMatte da 12 pollici, un corpo sottile e una tastiera molto comoda. Durante la prova abbiamo apprezzato fluidità, audio e comfort visivo, mentre i test hanno chiarito pregi e qualche limite nelle prestazioni. L'autonomia ha convinto anche nell'uso intermittente; la scelta passa dalla compatibilità delle proprie app e dal valore del pacchetto con accessori, proposto a 749 euro
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
Debuttano ufficialmente i primi sistemi notebook basati su piattaforma NVIDIA RTX Spark, abbinati a Windows on ARM e pensati per l'intelligenza artificiale agentica. Architettura integrata tra CPU e GPU che condividono la memoria di sistema, capace di gestire in locale modelli molto grandi ma al contempo anche di spiccare con la grafica e l'elaborazione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-04-2009, 09: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, 09:52   #2
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1176
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 09:56.
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2009, 23: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, 10: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, 11:41   #5
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1176
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 11:59.
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
Clamoroso dietrofront di Sony: cancellat...
GeForce NOW, tante novità con l'u...
Il mercato smartphone rallenta nel Q3 20...
Addio al Valve Index: fine della produzi...
Seggiolini auto i-Size da 0 a 12 anni in...
Amazon determina i prezzi di tutto il we...
Robot aspirapolvere ECOVACS in offerta s...
Bodywel F20PRO o DEEPOWER A5? Due fat bi...
Gli agenti AI non diventano pazzi, sono ...
Kenwood Chef XL 6,7L a 239€ su Amazon: u...
Sconto al check-out a sorpresa: Smart TV...
Prima guida con GAC Aion V: interni prem...
Gli investitori frenano su Anthropic: IP...
Il meglio di Amazon in 10 articoli: 1, 2...
OpenAI, un modello GPT-5.6 Sol ha usato ...
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: 14:28.


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