• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ udefined reference to Class::Class()

Object Storage Arubacloud
+1 głos
227 wizyt
pytanie zadane 21 stycznia 2018 w C i C++ przez michaloxs Początkujący (280 p.)
edycja 21 stycznia 2018 przez michaloxs
Witam. Mam problem ze swoim programem. Otóż wyskakuje mi taki błąd udefined reference to Napis::Napis() i udefined reference to Pracownik::Pracownik(). Jeżeli chodzi o IDE to używam Code:Blocks. Pamiętam, że jak kiedyś próbowałem niemal identyczny program skompilować w visual studio to tam działało. Wie ktoś o co może chodzić?
Błąd pojawia się w pliku main.cpp przy deklaracji obiektów imie i nazwisko, a także przy przypisaniu pamięci dla wskaźnika nowy.
Tutaj jest kod:

https://pastebin.com/u/NoName977
komentarz 21 stycznia 2018 przez Sebastian Fojcik Nałogowiec (43,040 p.)
W której linii, w którym pliku ten błąd? Podaj te szczegóły, to może bez kompilowania kodu ktoś Ci pomoże ;-)
komentarz 22 stycznia 2018 przez j23 Mędrzec (194,920 p.)

@michaloxs, dodałeś wszystkie pliki źródłowe jak należy?

 

PS. u mnie twój kod się kompiluje.

1 odpowiedź

0 głosów
odpowiedź 21 stycznia 2018 przez 10kw10 Pasjonat (22,880 p.)
Napis imie, Nazwisko;

Napis nie ma konstruktora domyślnego. 

1
komentarz 21 stycznia 2018 przez Sebastian Fojcik Nałogowiec (43,040 p.)

Dodam.

Tak samo przy tworzeniu:

nowy = new Pracownik();

Wywołujesz konstruktora Pracownik() bez żadnych argumentów, a taki konstruktor nie jest zdefiniowany.

UWAGA. Jeśli nie utworzysz żadnego konstruktora w klasie, to kompilator sam (niejawnie) utworzy konstruktor bezargumentowy, który nic nie robi. Natomiast, jeśli utworzysz jakiś swój własny konstruktor, to automatycznie nadpisujesz ten domyślny bezargumentowy.

komentarz 21 stycznia 2018 przez michaloxs Początkujący (280 p.)
W pliku Napis.h jest konstkuktor Napis(const char* nap = ""). Nie powinien on być domyślnym konstruktorem, który przypisze obiektom pusty ciąg?
komentarz 21 stycznia 2018 przez michaloxs Początkujący (280 p.)

@10kw10, @Sebastian Fojcik, Tak na szybkości sprawdziłem i w visual studio kod kompiluje się bez żadnych problemów.

komentarz 21 stycznia 2018 przez Sebastian Fojcik Nałogowiec (43,040 p.)

Przyjrzałem się dokładniej Twojemu programowi i rzeczywiście. Wybacz za moje niedopatrzenie. Twoje klasy posiadają jednak konstruktory domniemane, bo wszystkie parametry mają wartości domniemane.

Nie mam niestety Code::Blocka u siebie na komputerze, ale mógłbyś przetestować taki prościutki program? Sprawdź czy działa u Ciebie. Jeśli nie, no to bardzo dziwna sprawa, bo powinien...

#include <iostream>

using namespace std;

class Klasa
{
public:
	Klasa( int n = 1, const char * str = "test" );
};

Klasa::Klasa( int n, const char * str )
{
	cout << "Utworzono " << n << " " << str << endl;
}

int main()
{
	Klasa * p = new Klasa();

	return 0;
}

Jeśli cudownie Code::Blocks taki konstruktor nagle zaakceptuje, to może upewnij się, że poprawnie dołączyłeś pliki do projektu i są one kompilowane. Spróbuj rozdzielić mój powyższy przykład na kilka plików, czy wtedy skompiluje? Odkryłeś jakąś dziwną anomalię kompilatora GCC (zakładam, że w nim kompilujesz).

Tak przy okazji.

Jeśli kod, który wysłałeś napisałeś sam, to muszę Cię szczerze pochwalić. Piękna składnia, wcięcia, podział na pliki, widzę, że konsekwentnie stosujesz nazwy zmiennych (prywatne zaczynasz od "m_". Korzystasz z wielu możliwości C++ od przeładowywania operatorów, po mechanizm przyjaźni. Funkcje są krótkie, proste do zrozumienia i robią to co sugeruje ich nazwa. Czytałem Twój kod z przyjemnością (co na tym forum jest rzadkością, bo sporo osób dopiero się uczy programowania i estetyka kodu nie jest dla nich ważna). Dziękuję Ci za tę przyjemność obejrzenia ładnego kodu :-)

komentarz 22 stycznia 2018 przez michaloxs Początkujący (280 p.)
Twój kod działa normalnie, rozdzieliłem go na kilka plików i nadal działa.

Podobne pytania

0 głosów
0 odpowiedzi 438 wizyt
pytanie zadane 13 października 2022 w C i C++ przez Bilib Użytkownik (990 p.)
0 głosów
3 odpowiedzi 266 wizyt
pytanie zadane 12 kwietnia 2018 w PHP przez matizuu Obywatel (1,100 p.)
0 głosów
1 odpowiedź 177 wizyt
pytanie zadane 22 stycznia 2023 w C i C++ przez Kamix02 Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...