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!!!