smazony Temat założony przez niniejszego użytkownika |
[C++]Problem z undefined reference konstruktora w liście jednokierunkowej » 2017-06-10 17:20:45 Witam, prosze o pomoc w weryfikacji jednego konkretnego w/w problemu we fragmencie kodu. Mianowicie nie mam pojęcia co robię nie tak. Najdziwniejsze iż taki sam kod w innym moim projekcie działa bez problemu (problem dopiero pojawia się gdy chce dodać nową klasę) #include <iostream> #include <fstream> #include <conio.h> #include <string.h> #include "naglowek.h"
using namespace std;
int main( void ) { int wybor1, wybor11; baza baza_wypozyczalnia; do { cout << "1. Dodaj film" << endl; cout << "2. Dodaj klienta" << endl; cout << "3. Wypisz liste filmow" << endl; cout << "4. Wypisz liste kleintow" << endl; cin >> wybor1; cout << endl; switch( wybor1 ) { case 1: { Filmy * f1 = new Filmy( 1, "test", 1, "test" ); f1->wypelnij(); baza_wypozyczalnia.list_push_front_filmy( f1 ); break; } case 2: { Osoby * k1 = new klienci( 1, "test2", "test2", 25.5, 30.5 ); k1->wypelnij(); baza_wypozyczalnia.list_push_front_klienci( k1 ); break; } case 3: { baza_wypozyczalnia.wypisz_liste_klientow(); } case 4: { baza_wypozyczalnia.wypisz_liste_filmow(); } } } while( wybor1 != 5 ); return( 0 ); }
#include <iostream> #include <fstream> #include <cstring> #include "naglowek.h" using namespace std;
Osoby::Osoby( int Nlp, string Nimie, string Nnazwisko ) { lp = Nlp; imie = Nimie; nazwisko = Nnazwisko; }
Osoby::Osoby() { lp = 0; }
Osoby::~Osoby() { ; } void Osoby::wypelnij() { cout << "Podaj imie: " << endl; cin >> imie; cout << "Podaj nazwisko: " << endl; cin >> nazwisko; } void Osoby::pokaz( void ) { cout << lp << endl; cout << "Imie: " << imie << endl; cout << "Nazwisko: " << nazwisko << endl; cout << endl; } int Osoby::pole_lp( void ) { return( lp ); } void Osoby::pole_lp( int x ) { lp = x; }
#include <iostream> #include <fstream> #include <cstring> #include "naglowek.h" using namespace std;
Filmy::Filmy( int Nlp, string Ntytul, int Nrok, string Ngatunek ) { lp = Nlp; tytul = Ntytul; rok = Nrok; gatunek = Ngatunek; }
Filmy::Filmy() { lp = 0; }
Filmy::~Filmy() { ; }
void Filmy::wypelnij() { cout << "Podaj tytul: " << endl; cin >> tytul; cout << "Podaj rok produkcji: " << endl; cin >> rok; cout << "Podaj gatunek: " << endl; cin >> gatunek; cout << endl; }
void Filmy::pokaz( void ) { cout << lp << endl; cout << "Tytul filmu: " << tytul << endl; cout << "Rok: " << rok << endl; cout << "Gatunek: " << gatunek << endl; cout << endl; }
int Filmy::pole_lp( void ) { return( lp ); } void Filmy::pole_lp( int x ) { lp = x; }
#ifndef NAGLOWEK_H_INCLUDED #define NAGLOWEK_H_INCLUDED
class Filmy { protected: int lp; std::string tytul; int rok; std::string gatunek; public: Filmy(); Filmy( int Nlp, std::string Ntytul, int Nrok, std::string Ngatunek ); void wypelnij(); void pokaz( void ); int pole_lp( void ); void pole_lp( int ); };
class Osoby { protected: int lp; std::string imie; std::string nazwisko; public: Osoby(); Osoby( int Nlp, std::string Nimie, std::string Nnazwisko ); virtual void wypelnij(); virtual void pokaz( void ); ~Osoby(); int pole_lp( void ); void pole_lp( int ); };
class klienci : public Osoby { private: double datawyp; double datazwr; public: klienci( int Nlp, std::string Nimie, std::string Nnazwisko, double Ndatawyp, double Ndatazwr ); void pokaz(); void wypelnij(); };
struct CWezel { CWezel * nast; CWezel * nastf; Osoby * s; Filmy * f; int indeks; int indeksf; CWezel() { nast = NULL; nastf = NULL; s = NULL; f = NULL; indeks = 0; indeksf = 0; } };
class baza { public: CWezel * head; CWezel * last; CWezel * headf; CWezel * lastf; int licznik; int licznikf; baza() { head = NULL; last = NULL; licznik = 0; headf = NULL; lastf = NULL; licznikf = 0; } void list_push_front_klienci( Osoby * ); void usun_klientow( int x ); void wypisz_liste_klientow(); void list_push_front_filmy( Filmy * ); void usun_film( int x ); void wypisz_liste_filmow(); };
#endif
#include <iostream> #include <fstream> #include "naglowek.h" using namespace std;
void baza::list_push_front_klienci( Osoby * os ) { CWezel * wezel = new CWezel; licznik++; wezel->s = os; wezel->indeks = licznik; wezel->nast = head; head = wezel; os->pole_lp( licznik ); }
void baza::wypisz_liste_klientow() { CWezel * wsk; wsk = head; while( wsk ) { wsk->s->pokaz(); wsk = wsk->nast; } delete wsk; } void baza::list_push_front_filmy( Filmy * film ) { CWezel * wezel = new CWezel; licznikf++; wezel->f = film; wezel->indeksf = licznikf; wezel->nastf = headf; headf = wezel; } void baza::wypisz_liste_filmow() { CWezel * wsk; wsk = headf; while( wsk ) { wsk->f->pokaz(); wsk = wsk->nastf; } delete wsk; }
|
|
carlosmay |
» 2017-06-10 18:24:03 Problem z undefined reference |
Wklej cały komunikat błędu. |
|
smazony Temat założony przez niniejszego użytkownika |
ndefined reference to » 2017-06-10 19:12:45 ||=== Build: Debug in Wypozyczalnia 2 (compiler: GNU GCC Compiler) ===| obj\Debug\baza.o||In function `ZN4baza19wypisz_liste_filmowEv':| D:\Dokumenty\Code Blocks Programy\Wypozyczalnia 2\baza.cpp|183|undefined reference to `Filmy::pokaz()'| ||error: ld returned 1 exit status| ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| |
|
mateczek |
» 2017-06-10 19:32:17 plik baza.cpp powinien zawierać "include baza.h" i tak samo dla każdej klasy |
|
smazony Temat założony przez niniejszego użytkownika |
» 2017-06-10 20:17:14 Tyle że ja mam jeden plik nagłówkowy z wszystkimi wymaganymi deklaracjami i jest on dołączony wszędzie a wyrzuca błąd o co kaman? |
|
carlosmay |
» 2017-06-10 22:08:06 Brakuje w "naglowek.h: - #include <string> - w deklaracji klasy Film deklaracji destruktora ~Film(); , a jest tylko rozwinięcie w pliku *.cpp - w deklaracji klasy baza rozwinięcia deklaracji void usun_klientow( int x ); oraz void usun_film( int x ); - w klasie klienci rozwinięcia klienci( int Nlp, std::string Nimie, std::string Nnazwisko, double Ndatawyp, double Ndatazwr );
, void pokaz(); , void wypelnij(); Wszędzie niepotrzebnie #include <cstring> . Niekonsekwencja w nazewnictwie: raz nazwa klas z dużej litery, raz z małej. Raz nagłówek <cstring>, a raz <string.h>. Dalej już nie szukałem, ale powinno zadziałać. |
|
mateczek |
» 2017-06-10 22:20:43 plik klijenci.cpp w ogóle nie wklejony na forum |
|
smazony Temat założony przez niniejszego użytkownika |
» 2017-06-10 22:55:40 Dziękuję bardzo za informację i pomoc, oczywiście wszystko poprawię. Jak już zaznaczałem to tylko część kodu gdzie występował wymieniony wyże błąd a którego nie potrafiłem zdiagnozować. Nazwy klas były z dużej litery tylko tych które to były klasami bazowymi, natomiast klasy potomne (których jak już wspomniałem nie wklejałem z małej aby szybko rozróżnić). Dziękuję :) |
|
« 1 » 2 |