Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z klasami w oddzielnych plikach

Ostatnio zmodyfikowano 2012-05-22 09:43
Autor Wiadomość
AbdulAbdul
Temat założony przez niniejszego użytkownika
problem z klasami w oddzielnych plikach
» 2012-05-20 20:49:37
Problem jest trochę dziwny bo gdy program umieszcze w jednym pliku (main.cpp) to wszystko  działa, natomiast jeśli go podzielę na oddzielne pliki *.h (dla klas) i plik główny main.cpp to wyskakuje mi błąd:
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall samochod::samochod(void)" (??0samochod@@QAE@XZ) referenced in function "public: __thiscall samochod_osobowy::samochod_osobowy(int,int)" (??0samochod_osobowy@@QAE@HH@Z)
oraz
1>D:\Programowanie\Programy C++\dziedziczenie Uryga Bartosz\Debug\dziedziczenie Uryga Bartosz.exe : fatal error LNK1120: 1 unresolved externals

Zamieszczam kody
C/C++
/******************************************************************************
*  KOMPONENT:   zadanie 5 - Dziedziczenie
*
*  OPIS: Główny plik programu
*               
*
*  AUTOR: Uryga Bartosz
*
*  HISTORIA:
*     Data powstania: <17-05-2012>
*     Data ostatniej modyfikacji: <18-05-2012>
*     Wersja: 1.000
*****************************************************************************/
#include <iostream>
#include "pojazd.h"
#include "samochod.h"
#include "samochod osobowy.h"
#include "samochod ciezarowy.h"

using namespace std;

int main()
{
   
    pojazd unicykl( 1, 5 );
    unicykl.przedstaw_sie();
    pojazd bicykl( 2, 14 );
    bicykl.przedstaw_sie();
    samochod_osobowy sedan( 200, 5 );
    sedan.przedstaw_sie();
    samochod_ciezarowy jelcz( 1000 );
    jelcz.przedstaw_sie();
    system( "pause" );
    return 0;
}

C/C++
/******************************************************************************
*  KOMPONENT:  zadanie 5 - Dziedziczenie
*
*  OPIS: klasa pojazd
*               
*
*  AUTOR: Uryga Bartosz
*
*  HISTORIA:
*     Data powstania: <17-05-2012>
*     Data ostatniej modyfikacji: <18-05-2012>
*     Wersja: 1.000
*****************************************************************************/
#pragma once

using namespace std;

class pojazd
{
private:
    int ilosc_kol, waga;
public:
    pojazd(); //<- konstruktor domyslny
    pojazd( int ILOSC_KOL, int WAGA )
    {
        ilosc_kol = ILOSC_KOL;
        waga = WAGA;
        cout << "Stworzono obiekt!\n";
    }
    ~pojazd()
    {
        cout << "Usunieto obiekt!\n";
       
    }
    void przedstaw_sie()
    {
        cout << "moja ilosc kol= " << ilosc_kol << endl;
        cout << "moja waga= " << waga << endl;
    }
};

C/C++
/******************************************************************************
*  KOMPONENT:   zadanie 5 - Dziedziczenie
*
*  OPIS: klasa samochód
*               
*
*  AUTOR: Uryga Bartosz
*
*  HISTORIA:
*     Data powstania: <17-05-2012>
*     Data ostatniej modyfikacji: <18-05-2012>
*     Wersja: 1.000
*****************************************************************************/
#pragma once

using namespace std;

class samochod
    : public pojazd
{
protected:
    int obciazenie, liczba_pas;
public:
   
    samochod();
    samochod( int OBCIAZENIE, int LICZBA_PAS )
        : obciazenie( OBCIAZENIE )
        , liczba_pas( LICZBA_PAS )
    { }
    void przedstaw_sie()
    {
        cout << "moje obciazenie= " << obciazenie << endl;
        cout << "moja liczba pasazerow= " << liczba_pas << endl;
    }
};

C/C++
/******************************************************************************
*  KOMPONENT:   zadanie 5 - Dziedziczenie
*
*  OPIS: klasa samochód osobowy
*               
*
*  AUTOR: Uryga Bartosz
*
*  HISTORIA:
*     Data powstania: <17-05-2012>
*     Data ostatniej modyfikacji: <18-05-2012>
*     Wersja: 1.000
*****************************************************************************/
#pragma once

using namespace std;

class samochod_osobowy
    : protected samochod
{
public:
   
    samochod_osobowy( int OBCIAZENIE, int LICZBA_PAS )
    {
        obciazenie = OBCIAZENIE;
        liczba_pas = LICZBA_PAS;
        cout << "Stworzono obiekt!\n";
    }
    void przedstaw_sie()
    {
        cout << "moje obciazenie= " << obciazenie << endl;
        cout << "moja liczba pasazerow= " << liczba_pas << endl;
    }
};

C/C++
/******************************************************************************
*  KOMPONENT:   zadanie 5 - Dziedziczenie
*
*  OPIS: klasa samochód ciężarowy
*               
*
*  AUTOR: Uryga Bartosz
*
*  HISTORIA:
*     Data powstania: <17-05-2012>
*     Data ostatniej modyfikacji: <18-05-2012>
*     Wersja: 1.000
*****************************************************************************/
#pragma once

using namespace std;

class samochod_ciezarowy
    : private samochod
{
private:
    int ladownosc;
public:
   
    samochod_ciezarowy( int LADOWNOSC )
    {
        ladownosc = LADOWNOSC;
        cout << "Stworzono obiekt!\n";
    }
    void przedstaw_sie()
    {
        cout << "moja ladownosc= " << ladownosc << endl;
    }
};

Z góry dzięki za pomoc,

P.S znacie jakiś dobry darmowy kurs do tworzenia aplikacji okienkowych w Visual Studio 2008?
P-57057
Admixior
» 2012-05-21 15:38:16
Problem:
W konstruktorze klasy samochod_osobowy(...) masz wywołanie konstruktora domyślnego z klasy samochód. Tę funkcję masz tylko zdeklarowaną, bez definicji.

Roziwązanie:
W liście inicjalizacyjnej musisz dać wywołanie konstruktora klasy tej którą dziedziczysz. Tylko ten konstruktor musi mieć odpowiednie parametry(taki który ma definicje).

Jak będziesz jeszcze coś chciał to pisz za niedługo będę.:)
NP:
C/C++
samochod_osobowy( int OBCIAZENIE, int LICZBA_PAS )
    : samochod( 2, 2 )
i tak do każdej klasy tzn samochód, samochód ciężarowy i samochod_osobowy.
P-57076
AbdulAbdul
Temat założony przez niniejszego użytkownika
» 2012-05-22 09:43:10
Dzięki za odpowiedź i pomoc ;)
P-57147
« 1 »
  Strona 1 z 1