Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ereditare metodi in c++
Forum - C/C++ - Ereditare metodi in c++

Avatar
Lego86 (Member)
Rookie


Messaggi: 30
Iscritto: 04/10/2008

Segnala al moderatore
Postato alle 14:37
Domenica, 29/11/2009
Salve, vorrei creare un programma che calcoli il volume di un parallelepipedo ereditando il metodo "Area()" da una classe rettangolo, in modo da poterla moltiplicare per l'altezza ed ottenere il volume. Purtroppo il dev-c++ mi dà   "[Linker error] undefined reference to `Rettangolo::Rettangolo()'". Sapreste aiutarmi? grazie

------------------Rettangolo.cpp---------------------------

#include <iostream>
using namespace std;
class Rettangolo{
      public:
         float Lung;
         float Larg;
         Rettangolo();
         Rettangolo(float VLung, float VLarg);
         float Area(float VLung, float VLarg);
         float Perimetro();

};
  
Rettangolo::Rettangolo(float VLung, float VLarg){
     Lung=VLung;
     Larg=VLarg;
}

float Rettangolo::Area(float VLung, float VLarg){
       return(VLung*VLarg);
}

float Rettangolo::Perimetro(){
       return(Lung*2+Larg*2);
}


----------------Paral.cpp---------------------------
#include <iostream>
#include "Rettangolo.cpp"
using namespace std;

class Paral : public Rettangolo {
      public:
         float Altezza;
         Paral(float VLung, float VLarg, float VAltezza);
         float Volume(float VLung, float VLarg, float VAltezza);                    
};


Paral::Paral(float VLung, float VLarg, float VAltezza){
     Lung=VLung;
     Larg=VLarg;
     Altezza=VAltezza;
}

float Paral::Volume(float Lung, float Larg, float Altezza){
     return(Rettangolo::Area(Lung,Larg)*Altezza);
}

----------------Paral_main.cpp------------------------
#include <iostream>
#include "Paral.cpp"
using namespace std;
int Lu,La,Al;
int main(){
    cout<<"Lunghezza: ";
    cin>>Lu;
    cout<<"Larghezza: ";
    cin>>La;
    cout<<"Altezza: ";
    cin>>Al;
    Paral P1 = Paral(Lu,La,Al);
    cout<<"Parallelepipedo costruito!"<<endl;
    float Volume = P1.Volume(Lu,La,Al);
    cout<<"Il volume del parallelepipedo e': "<<Volume<<endl;
    system("PAUSE");
    return 0;
}

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 23:42
Domenica, 29/11/2009
semplice.

Hai dichiarato il costruttore Rettangolo() nella classe Rettangolo, ma non l'hai implementato.

Due sono le cose che puoi fare:
1- Implementa il costruttore, anche vuoto...

Codice sorgente - presumibilmente Plain Text

  1. Rettangolo::Rettangolo()
  2. {
  3.  
  4. }



2- Elimina la dichiarazione del costruttore dalla classe. In questo modo userà un costruttore vuoto di default che non fa nulla.



PM Quote
Avatar
Lego86 (Member)
Rookie


Messaggi: 30
Iscritto: 04/10/2008

Segnala al moderatore
Postato alle 9:13
Lunedì, 30/11/2009
Risolto!! Se cancellavo il metodo mi dava ancora un altro errore, ma aggiungendoci quello vuoto funziona perfettamente, grazie mille!

Ultima modifica effettuata da Lego86 il 30/11/2009 alle 9:16
PM Quote