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

[C++]Problem z undefined reference konstruktora w liście jednokierunkowej

Ostatnio zmodyfikowano 2017-06-11 14:03
Autor Wiadomość
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ę)

C/C++
#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 );
}


C/C++
#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;
}

C/C++
#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;
}

C/C++
#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(); // konstruktor
    Osoby( int Nlp, std::string Nimie, std::string Nnazwisko );
    virtual void wypelnij(); // konstruktor
    virtual void pokaz( void );
    ~Osoby(); // destruktor
    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;
    }
    /*    baza::~baza()
        {
   
            CWezel *p;
            while(head)
            {
                p = head -> nast;
                delete head;
                head = p;
            }
   
        }
   
    */
    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 // NAGLOWEK_H_INCLUDED

C/C++
#include <iostream>
#include <fstream>
#include "naglowek.h"
using namespace std;

//////////////////////Klienci///////////////////////////////////////////////
void baza::list_push_front_klienci( Osoby * os )
{
    CWezel * wezel = new CWezel; //Tworzy nowy wezel
    licznik++;
   
    wezel->s = os; //Przypisuje osoby do wenzla
    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; //przypisanie filmu do wezla
    wezel->indeksf = licznikf;
   
    wezel->nastf = headf;
    headf = wezel;
    //    film->pole_lp(licznikf);
}
void baza::wypisz_liste_filmow()
{
    CWezel * wsk;
    wsk = headf;
   
    while( wsk )
    {
        wsk->f->pokaz();
        wsk = wsk->nastf;
    }
    delete wsk;
   
}
P-162333
carlosmay
» 2017-06-10 18:24:03
Problem z undefined reference
Wklej cały komunikat błędu.
P-162338
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)) ===|
P-162341
mateczek
» 2017-06-10 19:32:17
plik baza.cpp powinien zawierać "include baza.h" i tak samo dla każdej klasy
P-162343
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?
P-162346
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
C/C++
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ć.
P-162353
mateczek
» 2017-06-10 22:20:43
plik klijenci.cpp w ogóle nie wklejony na forum
P-162355
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ę :)
P-162358
« 1 » 2
  Strona 1 z 2 Następna strona