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: #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
#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; }
#include <iostream> #include "Osoba.h"
using namespace std;
int main() { osoba uczen; }
|
|
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. |
|
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: osoba uczen();
osoba uczen( void );
|
|
Maver Temat założony przez niniejszego użytkownika |
» 2010-07-16 14:40:17 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?? |
|
jacek_k |
» 2010-07-17 20:58:29 Wg mnie brakuje konstruktora domyślnego class osoba { //... osoba(){} };
|
|
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). |
|
Maver Temat założony przez niniejszego użytkownika |
» 2010-07-17 21:23:49 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. |
|
wojos |
» 2010-07-17 21:35:28 a ja sorry za złą podpowiedź - nie zauważyłem tego konstruktora :P |
|
« 1 » |