Cześć! Na początku chciałbym zaznaczyć że jestem nowy w temacie, przeczytałem ostatnio Symfonię C++ pana Grębosza, poduczyłem się nieco SFML 2.4.2 i uznałem że to czas na pierwszy większy projekt, wybór padł na program do biblioteki szkolnej, chcę go napisać techniką obiektowo orientowaną (pomysł znaleziony na forum). Przechodząc do meritum, zainstalowałem do projektu bibliotekę SFML według poradnika znalezionego pod linkiem: https://forum.pasja-informatyki.pl/250470/biblioteki-graficzne-a-visual-studio-2017-help . Sama biblioteka działa dobrze, nie ma żadnych problemów, zaczynają się natomiast kiedy piszę następne klasy( używam w nich funkcji wirtualnych jeśli ma to znaczenie ). Oto błędy jakie otrzymuję, niestety starałem się to rozwiązać cały dzień i nic nie przyszło mi do głowy (próbowałem również linkować statycznie ale to nie rozwiązało problemu) więc zwracam się do kogoś bardziej doświadczonego:
Theadmaster.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Tperson::share_name(void)" (?share_name@Tperson@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
Tperson.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Tperson::share_name(void)" (?share_name@Tperson@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
Tstudent.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Tperson::share_name(void)" (?share_name@Tperson@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
Tteacher.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Tperson::share_name(void)" (?share_name@Tperson@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
Theadmaster.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual int __thiscall Tperson::share_PESEL(void)" (?share_PESEL@Tperson@@UAEHXZ)
Tperson.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual int __thiscall Tperson::share_PESEL(void)" (?share_PESEL@Tperson@@UAEHXZ)
Tstudent.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual int __thiscall Tperson::share_PESEL(void)" (?share_PESEL@Tperson@@UAEHXZ)
Tteacher.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual int __thiscall Tperson::share_PESEL(void)" (?share_PESEL@Tperson@@UAEHXZ)
Theadmaster.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual int __thiscall Theadmaster::book(void)" (?book@Theadmaster@@UAEHXZ)
Tstudent.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual int __thiscall Tstudent::book(void)" (?book@Tstudent@@UAEHXZ)
Tteacher.obj : error LNK2001: nierozpoznany symbol zewnętrzny "public: virtual int __thiscall Tteacher::book(void)" (?book@Tteacher@@UAEHXZ)
D:\visual\Library v2.0\Debug\Library v2.0.exe : fatal error LNK1120: liczba nierozpoznanych elementów zewnętrznych: 5
Plik main.cpp
#include"nagl.h"
int main()
{}
Plik nagłówkowy nagl.h
#ifndef nagl_h
#define nagl_h
#include<iostream>
#include<string>
#include<ctime>
#include<SFML\Graphics.hpp>
using namespace std;
#endif // !nagl_h
Klasa abstrakcyjna Tperson.h
#ifndef Tperson_h
#define Tperson_h
#include "nagl.h"
class Tperson
{
protected:
string name; //imie
string surname; //nazwisko
const tm date_of_birth; //data urodzenia, tm to struktura
const int PESEL; //numer pesel
public:
Tperson(string name, string surname, tm date, int PESEL); //konstruktor
virtual string share_name(); // zwraca imie i nazwisko
virtual int share_PESEL(); // zwraca pesel danej osoby
virtual int book() = 0; // wirtualka zwracajaca numer danej wypozyczonej ksiazki
virtual short priority() = 0; //wirtualka zwracajaca priorytet osoby
virtual ~Tperson(); //destruktor wirtualny
};
#endif
Plik Tperson.cpp
#include "Tperson.h"
//***************************************************************************
Tperson::Tperson(string name, string surname, tm date, int PESEL) :
name(name), surname(surname), date_of_birth(date), PESEL(PESEL) {} // konstruktor osoby
//***************************************************************************
Tperson::~Tperson()
{
}
Klasa pochodna od Tperson o nazwie Tteacher(plik Tteacher.h)
#ifndef Tteacher_h
#define Tteacher_h
#include "Tperson.h"
class Tteacher : public Tperson
{
int *book_number; //wsk do tablicy nr ksiazek
short priority; //waga tego kogos w szkole
public:
Tteacher(string name, string surname, tm date, int PESEL, short prior = 1, int *ptr = (new int[15])); //przyjmuje argumenty dla siebie i klasy podstawowej
int book(); // funkcja opisujaca nr zwracanej ksiazki
short prior(); //funkcja do zwrotu wagi danej osoby
virtual ~Tteacher(); //destruktor wirtualny, powinien usuwac utworzona tablice nr
};
#endif
Plik Tteacher.cpp
#include "Tteacher.h"
//*********************************************************
Tteacher::Tteacher(string name, string surname, tm date, int PESEL, short prior, int *ptr) :
Tperson(name, surname, date, PESEL), priority(prior), book_number(ptr) {} // konstruktor klasy podstawowej i skladnikow pochodnej
//**********************************************************
Tteacher::~Tteacher()
{
delete book_number; //destruktor wirt klasy pochodnej, usuniecie tablicy do nr ksiazek
}
Z góry dziękuję za pomoc i życzę miłego dnia :D