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

    [C++] VISUAL STUDIO 2013: error C2011: 'StatusPrinter': ridefinizione tipo 'class'

    Buongiorno,

    ho un programma in C++ con i seguenti header e main.cpp

    StatusPrinter.h
    codice:
    
    class StatusPrinter{
    public:
    	virtual void printStatus() = 0;
    };
    Accumulator.h

    codice:
    #include "StatusPrinter.h"
    class Accumulator :public StatusPrinter {
    public:
    	Accumulator() :sum(0){}
    	Accumulator(int n) :sum(n){}
    	void add(int n){ sum += n; }
    	int getSum(){ return sum; }
    	void printStatus(){ cout << "Sono un accumulatore e il mio contenuto e' " << sum << endl; }
    private:
    	int sum;
    };
    Counter.h
    codice:
    
    
    class Counter {
    public:
    	Counter() :value(0){};
    	Counter(int n) :value(n){};
    	int getValue() {
    		return value;
    	}
    
    
    	void increment(){ value++; }
    protected:
    	int value;
    	
    };
    BigCounter.h
    codice:
    #include "Counter.h"
    #include "StatusPrinter.h"
    #include <iostream>
    using namespace std;
    class BigCounter :public Counter, public StatusPrinter{
    public:
    	void increment(){ Counter::increment(); Counter::increment(); }
    	void printStatus(){ cout << "Sono un contatore e il mio contenuto e' " << Counter::value << endl; }
    };
    main.cpp
    codice:
    // Counter.cpp : definisce il punto di ingresso dell'applicazione console.
    //
    
    
    #include "stdafx.h"
    #include"BigCounter.h"
    #include "Accumulator.h"
    
    
    #include<iostream>
    using namespace std;
    
    
    int main() {
    
    
    	BigCounter *c1 = new BigCounter();
    	Accumulator *c2 = new Accumulator();
    
    
    	cout << c1->getValue() << endl;
    	cout << c2->getSum() << endl;
    	c1->increment();
    	c2->add(5);
    	c1->printStatus(); 
    	c2->printStatus();
    }
    ho i seguenti errori, che HO CAPITO, in particolare l'error C2011;

    1>------ Inizio compilazione: Progetto: Counter, Configurazione: Debug Win32 ------
    1> Counter.cpp
    1>c:\users\lello\documents\visual studio 2013\projects\counter\counter\statusprinter.h(2): error C2011: 'StatusPrinter': ridefinizione tipo 'class'
    1> c:\users\lello\documents\visual studio 2013\projects\counter\counter\statusprinter.h(2): vedere la dichiarazione di 'StatusPrinter'
    1>c:\users\lello\documents\visual studio 2013\projects\counter\counter\accumulator.h(2): error C2504: 'StatusPrinter': classe base non definita
    1>c:\users\lello\documents\visual studio 2013\projects\counter\counter\accumulator.h(8): error C2065: 'cout': identificatore non dichiarato
    1>c:\users\lello\documents\visual studio 2013\projects\counter\counter\accumulator.h(8): error C2065: 'endl': identificatore non dichiarato
    1>c:\users\lello\documents\visual studio 2013\projects\counter\counter\bigcounter.h(6): error C2504: 'StatusPrinter': classe base non definita
    ========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========



    HO CAPITO che dipendono da un inserimento multiplo del header StatusPrinter.h che non so risolvere, perchè per come è strutturato il mio programma non posso togliere l'header StatusPrinter ad altre classi in cui serve per l'ereditarietà multipla,
    Mi Aiutate? Datemi una soluzione a questo problema, sono neofita del C++, sono abituato in Java, grazie!!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il file StatusPrinter.h dovrebbe essere

    codice:
    #ifndef __STATUSPRINTER__
    #define __STATUSPRINTER__
    
    
    class StatusPrinter
    {
    public:
        virtual void printStatus() = 0;
    };
    
    
    #endif
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    grazie 1000 oregon FUNZIONA,
    ma mi spieghi quelle definizioni di macro

    #ifndef
    ...
    #endif

    cosa sono????

    sono neofita non le ho mai viste
    Ultima modifica di lello82nap; 09-11-2013 a 11:44

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A parte il fatto che ho provato e funziona senza errori, quell'errore mi sembra strano ...

    Il codice è come ti ho indicato? Mostra il file nuovamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    grazie 1000 oregon FUNZIONA,
    ma mi spieghi quelle definizioni di macro

    #ifndef
    ...
    #endif

    cosa sono????

    sono neofita non le ho mai viste

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Qual era il problema?

    Si tratta di comandi per la "compilazione condizionale", molto comuni ... qualche info in

    http://wwwusers.di.uniroma1.it/~pari...mpCondMake.pdf

    Comunque, se dovrai usare il C/C++, per qualsiasi motivo, ti consiglio di adottare dei libri, più di uno, perché non si possono imparare questi linguaggi sui forum.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    nessun problema avevo dimenticato #endif
    io sto studiando per esame universitario dalle slide del professore, lui mi ha consigliato di comprare il manuale di Strustap, ma per il momento costa troppo. E per quel che devo fare io devo conoscere solo i fondamenti della programmazione ad oggetti piu' le librerie principali. non so perchè sia capitato questo inconveniente e non so se il prof mi lascerà adottare la tua soluzione. mercoledì chiederò.
    grazie infinite mi hai aiutato davvero! :-)

    p.s. mi sai consigliare qualche buon manuale online magari free?

  8. #8
    Quote Originariamente inviata da lello82nap Visualizza il messaggio
    io sto studiando per esame universitario dalle slide del professore, lui mi ha consigliato di comprare il manuale di Strustap,
    Stroustrup
    ma per il momento costa troppo. E per quel che devo fare io devo conoscere solo i fondamenti della programmazione ad oggetti piu' le librerie principali. non so perchè sia capitato questo inconveniente e non so se il prof mi lascerà adottare la tua soluzione. mercoledì chiederò.
    È un idioma super-standard che si usa in C e in C++ per prevenire inclusioni multiple (leggi ad esempio qui), dubito non ti venga lasciato usare.
    p.s. mi sai consigliare qualche buon manuale online magari free?
    Cerca "Thinking in C++"; anche i tutorial su learncpp.com per quel che ho visto non erano male.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Stroustrup

    È un idioma super-standard che si usa in C e in C++ per prevenire inclusioni multiple (leggi ad esempio qui), dubito non ti venga lasciato usare.

    Cerca "Thinking in C++"; anche i tutorial su learncpp.com per quel che ho visto non erano male.
    grazie mille

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.