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

Błąd kompilacji kodu podzielonego na pliki

Ostatnio zmodyfikowano 2010-07-17 21:35
Autor Wiadomość
Maver
Temat założony przez niniejszego użytkownika
Błąd kompilacji kodu podzielonego na pliki
» 2010-07-16 12:05:15
Witam!
Następujący program nie może się skompilować wyświetlany błąd
to undefined reference to (i tu jest nazwa konstruktora). Pojawia się on przy tworzeniu obiektu klasy oto kody plikow:
C/C++
//Osoba.h
#ifndef OSOBA_H
#define OSOBA_H

using namespace std;
class osoba
{
    string imie,
    nazwisko,
    kolor_oczu;
   
    int wiek,
    wzrost;
   
public:
   
    osoba( string imie, string nazwisko, string kolor_oczu, int wiek, int wzrost );
    //----------------------------------------------------------------------------
    osoba( const osoba & wzor );
    //----------------------------------------------------------------------------
    void wypisz( void );
    //----------------------------------------------------------------------------
    osoba( void );
   
   
};

#endif
C/C++
//Osoba.cpp

#include <iostream>
#include "Osoba.h"
using namespace std;
//-----------------------------------------------------------------------
osoba::osoba( string imie, string nazwisko,
string kolor_oczu, int wiek, int wzrost )

    : imie( imie )
    , nazwisko( nazwisko )
    , kolor_oczu( kolor_oczu )
    , wiek( wiek )
    , wzrost( wzrost )
{
    cout << imie << " " << nazwisko << endl
    << "wiek: " << wiek << " lat" << endl
    << "wzrost: " << wzrost << " cm" << endl
    << "kolor oczu: " << kolor_oczu << endl
    << endl
    << endl;
}
//-----------------------------------------------------------------------
osoba::osoba( const osoba & wzor )
{
    imie = wzor.imie;
    nazwisko = wzor.nazwisko;
    kolor_oczu = wzor.kolor_oczu;
    wiek = wzor.wiek;
    wzrost = wzor.wzrost;
   
    cout << imie << " " << nazwisko << endl
    << "wiek: " << wiek << " lat" << endl
    << "wzrost: " << wzrost << " cm" << endl
    << "kolor oczu: " << kolor_oczu << endl
    << "KLON!! KLON!! KLON!! KLON!!"
    << endl
    << endl;
}
//-------------------------------------------------------------------------------------
osoba::osoba( void )
    : imie( "Anonim" )
    , nazwisko( " " )
    , kolor_oczu( "Nieznany" )
    , wiek( 0 )
    , wzrost( 0 )
{
    cout << imie << " " << nazwisko << endl
    << "wiek: " << wiek << " lat" << endl
    << "wzrost: " << wzrost << " cm" << endl
    << "kolor oczu: " << kolor_oczu << endl
    << endl
    << endl;
}

//----------------------------------------------------------------------
void osoba::wypisz()
{
    cout << imie << " " << nazwisko << endl
    << "wiek: " << wiek << " lat" << endl
    << "wzrost: " << wzrost << " cm" << endl
    << "kolor oczu: " << kolor_oczu << endl
    << endl
    << endl;
}
//----------------------------------------------------------------------
C/C++
//main.cpp
#include <iostream>
#include "Osoba.h"   
//<------jeśli zmienie na "Osoba.cpp" kompilacja wykonuje się
using namespace std;

int main()
{
    osoba uczen; //<---tu występuje błąd
}
P-19899
michalp
» 2010-07-16 12:54:46
Na pewno utworzyles projekt w swoim IDE? Chyba ze kompilujesz z lini polecen/makefile'a i zapomniales skompilowac Osoba.cpp.
P-19900
lenrokskate
» 2010-07-16 14:03:34
wygląda na to, że masz deklarację konstruktora ale nie masz definicji

prawdopodobnie zrobiłem literówkę w nazwie lub argumentach

spróbuj też zrobić tak:
C/C++
osoba uczen();

//lub

osoba uczen( void );
P-19902
Maver
Temat założony przez niniejszego użytkownika
» 2010-07-16 14:40:17
C/C++
osoba uczen( void );
bardziej mi wygląda na deklaracje funkcji bez argumentów zwracającą obiekt typu osoba. A o co chodzi z tą linią poleceń i makefile'em??
P-19903
jacek_k
» 2010-07-17 20:58:29
Wg mnie brakuje konstruktora domyślnego

class osoba
{
  //...
  osoba(){}
};
P-19926
wojos
» 2010-07-17 21:19:57
Zdecydowanie to co osoba wyżej powiedziała. Stworzyłeś obiekt nie dając mu argumentów ze swojego konstruktora a także nie zrobiłeś konstruktora domyślnego. Konstruktor domyślny dołączany jest przez kompilator tylko w wypadku jeżeli nie ma żadnego innego w klasie. Jeśli jest jakikolwiek (a Ty stworzyłeś taki, który przyjmuje kilka parametrów), to go nie dostarcza. Także jeżeli chcesz mieć możliwość tworzenia obiektów tej klasy bez podawania argumentów, musisz w klasie przeciążyć konstruktor dorabiając drugi, domyślny (nie przyjmujący żadnych argumentów).
P-19929
Maver
Temat założony przez niniejszego użytkownika
» 2010-07-17 21:23:49
C/C++
osoba::osoba( void )
    : imie( "Anonim" )
    , nazwisko( " " )
    , kolor_oczu( "Nieznany" )
    , wiek( 0 )
    , wzrost( 0 )
{
    cout << imie << " " << nazwisko << endl
    << "wiek: " << wiek << " lat" << endl
    << "wzrost: " << wzrost << " cm" << endl
    << "kolor oczu: " << kolor_oczu << endl
    << endl
    << endl;
}
Jednak jest. A poza tym to przy wywołaniu "zwykłego" konstruktora także pokazuje się ten sam błąd tylko pojawia się deklaracja tegoż konstruktora.

EDIT. heh dziwne gdy przed chwilą próbowałem skompilować ten program wszystko poszło dobrze. Sorki za kłopot ale to Code::Blocks jakieś dziwne jest.
P-19931
wojos
» 2010-07-17 21:35:28
a ja sorry za złą podpowiedź - nie zauważyłem tego konstruktora :P
P-19932
« 1 »
  Strona 1 z 1