A więc stworzyłem sobie klasę abstrakcyjną, z której dziedziczy reszta klas.
#pragma once
#include <string.h>
#include <iostream>
using namespace std;
class ksiazka
{
protected:
string tytul;
string autor;
string gatunek;
string okladka;
string wydawnictwo;
int rok_wyd;
float cena;
float dlugosc;
float wysokosc;
float szerokosc;
public:
void set_tytul(string);
void set_autor(string);
void set_gatunek(string);
void set_okladka(string);
void set_wydawnictwo(string);
void set_rok_wyd(int);
void set_cena(float);
void set_dlugosc(float);
void set_wysokosc(float);
void set_szerokosc(float);
string get_tytul();
string get_autor();
string get_gatunek();
string get_okladka();
string get_wydawnictwo();
int get_rok_wyd();
float get_cena();
float get_dlugosc();
float get_wysokosc();
float get_szerokosc();
virtual void wyswietl()=0;
virtual void wczytaj()=0;
virtual ~ksiazka();
};
#include "ksiazka.h"
void ksiazka::set_tytul(string tytul)
{
tytul=tytul;
}
void ksiazka::set_autor(string autor)
{
autor=autor;
}
void ksiazka::set_gatunek(string gatunek)
{
gatunek=gatunek;
}
void ksiazka::set_okladka(string okladka)
{
okladka=okladka;
}
void ksiazka::set_wydawnictwo(string wydawnictwo)
{
wydawnictwo=wydawnictwo;
}
void ksiazka::set_rok_wyd(int rok_wyd)
{
rok_wyd=rok_wyd;
}
void ksiazka::set_cena(float cena)
{
cena=cena;
}
void ksiazka::set_dlugosc(float dlugosc)
{
dlugosc=dlugosc;
}
void ksiazka::set_wysokosc(float wysokosc)
{
wysokosc=wysokosc;
}
void ksiazka::set_szerokosc(float szerokosc)
{
szerokosc=szerokosc;
}
string ksiazka::get_tytul()
{
return tytul;
}
string ksiazka::get_autor()
{
return autor;
}
string ksiazka::get_gatunek()
{
return gatunek;
}
string ksiazka::get_okladka()
{
return okladka;
}
string ksiazka::get_wydawnictwo()
{
return wydawnictwo;
}
int ksiazka::get_rok_wyd()
{
return rok_wyd;
}
float ksiazka::get_cena()
{
return cena;
}
float ksiazka::get_dlugosc()
{
return dlugosc;
}
float ksiazka::get_wysokosc()
{
return wysokosc;
}
float ksiazka::get_szerokosc()
{
return szerokosc;
}
ksiazka::~ksiazka()
{
}
Wpisze tylko jedną z 4 klas które dziedziczą, nie ma sensu wszystkich, każda wygląda praktycznie tak samo
#pragma once
#include "ksiazka.h"
#include <string.h>
#include <iostream>
using namespace std;
class ksiazkafan :public ksiazka
{
public:
void wyswietl();
void wczytaj();
ksiazkafan();
ksiazkafan(string, string, string, string, string, int, float, float, float, float);
~ksiazkafan();
};
#include "ksiazkafan.h"
void ksiazkafan::wyswietl()
{
cout<<tytul<<", "<<autor<<endl;
cout<<"gatunek: "<<gatunek<<", "<<"okladka: "<<okladka<<endl;
cout<<wydawnictwo<<", "<<rok_wyd<<endl;
cout<<"cena :"<<cena<<endl;
cout<<"wymiary ksiazki :"<<dlugosc<<"x"<<wysokosc<<"x"<<szerokosc<<endl;
}
void ksiazkafan::wczytaj()
{
cout<<"Podaj tytul"<<endl;
cin>>tytul;
cout<<"Podat autora"<<endl;
cin>>autor;
cout<<"Podaj gatunek"<<endl;
cin>>gatunek;
cout<<"Twardosc okladki? :"<<endl;
cin>>okladka;
cout<<"Podaj wydawnictwo"<<endl;
cin>>wydawnictwo;
cout<<"Podaj rok wydania"<<endl;
cin>>rok_wyd;
cout<<"Ile kosztuje? :"<<endl;
cin>>cena;
cout<<"Podaj wymiary ksiazki (dlugosc x wysokosc x szerokosc)"<<endl;
cin>>dlugosc>>wysokosc>>szerokosc;
}
ksiazkafan::ksiazkafan(string t, string a, string g, string o, string w, int r, float c, float x, float y, float z)
{
tytul=t;
autor=a;
gatunek=g;
okladka=o;
wydawnictwo=w;
rok_wyd=r;
cena=c;
dlugosc=x;
wysokosc=y;
szerokosc=z;
}
ksiazkafan::ksiazkafan()
{
tytul="Wiedzmin";
autor="A. Sapkowski";
gatunek="fantasy";
okladka="miekka";
wydawnictwo="Fantastyka Polska";
rok_wyd=1995;
cena=49.99;
dlugosc=6;
wysokosc=16;
szerokosc=3.5;
}
ksiazkafan::~ksiazkafan()
{
}
No i main
#include <iostream>
#include <string.h>
#include "ksiazkafan.h"
#include "ksiazkahis.h"
#include "ksiazkakr.h"
#include "ksiazkaprzyg.h"
#include <vector>
#include <conio.h>
#include <cstdlib>
using namespace std;
int main()
{
ksiazka *wsk;
int i;
int n;
int j;
int k;
ksiazkafan tab1[25];
for(i=0;i<25;i++)
{
wsk=&tab1[i];
wsk->wyswietl();
}
ksiazkahis tab2[25];
for(n=0;n<25;n++)
{
wsk=&tab2[n];
wsk->wyswietl();
}
ksiazkakr tab3[25];
for(j=0;j<25;j++)
{
wsk=&tab3[j];
wsk->wyswietl();
}
ksiazkaprzyg tab4[25];
for(k=0;k<25;k++)
{
wsk=&tab4[k];
wsk->wyswietl();
}
vector <ksiazkafan> wektor1;
for(int i=0;i<25;i++)
{
wektor1.push_back(tab1[i]);
}
vector <ksiazkahis> wektor2;
for(int n=0;n<25;n++)
{
wektor2.push_back(tab2[n]);
}
vector <ksiazkakr> wektor3;
for(int j=0;j<25;j++)
{
wektor3.push_back(tab3[j]);
}
vector <ksiazkaprzyg> wektor4;
for(int k=0;k<25;k++)
{
wektor4.push_back(tab4[k]);
}
int a;
int b;
int c;
int d;
string wyszukiwanie;
cout<<"Wybierz gatunek ktory chcesz zobaczyc (fantasy, kryminal, przygodowa, historyczna)"<<endl;
cin>>wyszukiwanie;
if(wyszukiwanie=="fantasy")
{
cout<<"wybierz numer pozycji"<<endl;
cin>>a;
wsk=&tab1[a];
wsk->wyswietl();
}
else if(wyszukiwanie=="kryminal")
{
cout<<"wybierz numer pozycji"<<endl;
cin>>b;
wsk=&tab3[b];
wsk->wyswietl();
}
else if(wyszukiwanie=="przygodowa")
{
cout<<"wybierz numer pozycji"<<endl;
cin>>c;
wsk=&tab4[c];
wsk->wyswietl();
}
else if(wyszukiwanie=="historyczna")
{
cout<<"wybierz numer pozycji"<<endl;
cin>>d;
wsk=&tab2[d];
wsk->wyswietl();
}
else if(wyszukiwanie!="fantasy"||wyszukiwanie!="kryminal"||wyszukiwanie!="przygodowa"||wyszukiwanie!="historyczna")
cout<<"brak danych"<<endl;
string gatunek2;
string decyzja;
cout<<"Czy chcesz dodac nowe pozycje do bazy danych? (tak lub nie)"<<endl;
cin>>decyzja;
if(decyzja=="tak"||decyzja=="TAK"||decyzja=="Tak")
{
cout<<"Wybierz gatunek"<<endl;
cin>>gatunek2;
if(gatunek2=="fantasy")
{
ksiazkafan kf1;
wsk=&kf1;
wsk->wczytaj();
wektor1.push_back(kf1);
}
if(gatunek2=="kryminal")
{
ksiazkakr kr1;
wsk=&kr1;
wsk->wczytaj();
wektor3.push_back(kr1);
}
if(gatunek2=="historyczna")
{
ksiazkahis kh1;
wsk=&kh1;
wsk->wczytaj();
wektor2.push_back(kh1);
}
if(gatunek2=="przygodowa")
{
ksiazkaprzyg kp1;
wsk->&kp1;
wsk->wczytaj();
wektor4.push_back(kp1);
}
}
else exit(0);
}
Problem jest w tym, że kiedy chcę skompilować to wyskakuje mi:
undefined reference to ksiazkafan::ksiazkafan()'
undefined reference to ksiazkahis::ksiazkahis()'
undefined reference to ksiazkakr::ksiazkakr()'
undefined reference to ksiazkaprzyg::ksiazkaprzyg()'
undefined reference to ksiazkafan::ksiazkafan()'
undefined reference to ksiazkafan::~ksiazkafan()'
undefined reference to ksiazkafan::~ksiazkafan()'
undefined reference to ksiazkakr::ksiazkakr()'
undefined reference to ksiazkakr::~ksiazkakr()'
undefined reference to ksiazkakr::~ksiazkakr()'
undefined reference to ksiazkahis::ksiazkahis()'
undefined reference to ksiazkahis::~ksiazkahis()'
undefined reference to ksiazkahis::~ksiazkahis()'
undefined reference to vtable for ksiazka'
undefined reference to vtable for ksiazkafan'
undefined reference to ksiazkafan::~ksiazkafan()'
undefined reference to ksiazkafan::~ksiazkafan()'
undefined reference to vtable for ksiazkahis'
undefined reference to ksiazkahis::~ksiazkahis()'
undefined reference to ksiazkahis::~ksiazkahis()'
undefined reference to vtable for ksiazkakr'
undefined reference to ksiazkakr::~ksiazkakr()'
undefined reference to ksiazkakr::~ksiazkakr()'
undefined reference to vtable for ksiazkaprzyg'
undefined reference to ksiazkaprzyg::~ksiazkaprzyg()'
undefined reference to ksiazkaprzyg::~ksiazkaprzyg()'
(no to skopiowane, odnośnie wszystkich klas)
Nie wiem co z tym zrobić, jestem początkujący, odkryłem że to najprawdopodobniej w pętlach tworzących obiekty, mógłbym robić je ręcznie, ale bez przesady, jest ich ze 100
Odnośnie tego co napisał kolega w poprzednim wątku, "zakreskowałem" jeden z konstruktorów tak, żeby pozostał tylko domyślny i dalej nic. Nie wiem jeśli ktoś ma chęci to może krok po kroku napisać jak rozwiązać ten problem bo ja troszkę zielonkawy jestem.
Liczę na każdą pomoc :)