Buongiorno,
ho un programma in C++ con i seguenti header e main.cpp
StatusPrinter.h
Accumulator.hcodice:class StatusPrinter{ public: virtual void printStatus() = 0; };
Counter.hcodice:#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; };
BigCounter.hcodice:class Counter { public: Counter() :value(0){}; Counter(int n) :value(n){}; int getValue() { return value; } void increment(){ value++; } protected: int value; };
main.cppcodice:#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; } };
ho i seguenti errori, che HO CAPITO, in particolare l'error C2011;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(); }
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!!!

Rispondi quotando