Errore con classi derivate

di il
8 risposte

Errore con classi derivate

Ho un problemino quando compilo. I file sono questi:
a.h

#ifndef A_H
#define A_H

class A
{
...
};

#endif // A_H
a.cpp

#include "a.h"
...
b.h

#ifndef B_H
#define B_H
#include "a.h"

//class A;
class B: public A
{
...
};

#endif // B_H
b.cpp

#include "a.h"
#include "b.h"
...
Compilando mi da l'errore "expected class-name before '{' token. Ho messo quindi un class A (quello commentato in b.h) e mi da l'errore "invalid use of inclomplete type struct A" e "forward declaration of struct A". Sempre nel file b.h...Che sbaglio? Cercando su internet vedo che la gente si dimentica qualche include, ma mi sembra però di averli già messi tutti.

8 Risposte

  • Re: Errore con classi derivate

    B.cpp non deve includere a.h
  • Re: Errore con classi derivate

    L'errore è sempre uguale anche se tolgo l'include che dici tu
  • Re: Errore con classi derivate

    Allora devi mettere un esempio concretto. Provato adesso sul compilatore e non da problemi.
  • Re: Errore con classi derivate

        #include <string>
        using std::string;
         
        class Operand
        {
        public:
            ...
            virtual void empty();
            virtual void fill();
            virtual Operand* mix(Operand* op2);
        };
    
    
        #include "operand.h"
        #include <string>
        using std::string;
         
        //class Operand;  Errore sia se non cè sia se c'è
        class Barrel: public Operand
        {
                ...
                virtual void empty();
                virtual void fill();
                virtual Barrel* mix(Operand* op2);
         
            protected:
                double capacity, content, temperature;
        };
    
    #include "calculatorwindow.h"
    #include "operand.h"
     
    using std::string;
     
    class CalculatorWindow;
    class Barrel;
    class Operand;
     
    class Calculator
    {
    public:
        ...
        Operand* operand1;
        Operand* operand2;
        double intoperand;
        string operation;
        string print;
        bool continue;
        ...
        void Fill(CalculatorWindow * calc);
        void Empty(CalculatorWindow * calc);
        Operand* Mix(CalculatorWindow * calc);
    };
    
    "Invalid use of incomplete type struct Operand forward declaration of struct Operand"...
  • Re: Errore con classi derivate

    Perche i forward qui?
    
    class CalculatorWindow;
    class Barrel;
    class Operand;
    
    Calculator non conosce Barrel.
  • Re: Errore con classi derivate

    Avevo lasciato fuori degli include Comunque ho delle operazioni che mi usano Barrel* e che funzionavano prima che io aggiungessi operand, quindi non dovrebbe essere la il problema.
    #include <string>
    #include <QtGui>
    #include "barrel.h"
    #include "calculatorwindow.h"
    #include "operand.h"
    
    
    using std::string;
    
    class CalculatorWindow;
    class Barrel;
    class Operand;
    
    class Calculator
    {
    public:
        ...
        Operand* operand1;
        Operand* operand2;
        double intoperand;
        string operation;
        string print;
        bool continue;
        ...
        void Fill(CalculatorWindow * calc);
        void Empty(CalculatorWindow * calc);
        Operand* Mix(CalculatorWindow * calc);
    };
    Comunque l'invalid mi manda alla riga 7 di barrel (la "{") mentre il forward mi manda alla riga 12 di calculator (la dichiarazione incompleta, però se la tolgo mi da ancora più errori perché dentro operator ho i calculator*)
  • Re: Errore con classi derivate

    Si può avere un esempio completo senza la gui di qt? almeno vedo se in console si può rimediare.
  • Re: Errore con classi derivate

    Tecnicamente ho risolto con uno static_cast (ora va)... Stay tuned XD
Devi accedere o registrarti per scrivere nel forum
8 risposte