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

Po instalacji SFML inne klasy zgłaszają błąd LINK 2001

Object Storage Arubacloud
–1 głos
166 wizyt
pytanie zadane 4 sierpnia 2017 w C i C++ przez Breader Nowicjusz (150 p.)
edycja 4 sierpnia 2017 przez Breader

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

komentarz 4 sierpnia 2017 przez WireNess Stary wyjadacz (11,240 p.)
Wróżbita Maciej tutaj nieprzebywa (chyba O.o) - podaj kod ;)
1
komentarz 4 sierpnia 2017 przez Breader Nowicjusz (150 p.)
Już uzupełnione :D

1 odpowiedź

+1 głos
odpowiedź 4 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
wybrane 4 sierpnia 2017 przez Breader
 
Najlepsza

Zapomniałeś zdefiniować metod, które są w tych errorach. Ten błąd oznacza, że ostatecznie podczas łączenia wszystkich jednostek translacji (czyli plików .o - wygenerowanych na podstawie plików źródłowych) nie znaleziono definicji danej metody/funkcji. Metody, które widnieją w errorach, musisz zdefiniować. To, że dasz modyfikator virtual przy metodzie nie zmienia faktu, że musisz je zdefiniować, nawet jeśli to klasa abstrakcyjna. Nie definiuje się tylko metod, które są czysto wirtualne - virtual void metoda() = 0; (ang. pure virtual)
To nie wina SFML tylko braku definicji w Twoich plikach.

komentarz 4 sierpnia 2017 przez Breader Nowicjusz (150 p.)
Faktycznie, teraz już działa, dziękuję bardzo za pomoc :D

Podobne pytania

0 głosów
1 odpowiedź 3,740 wizyt
pytanie zadane 11 maja 2017 w C i C++ przez Isild Użytkownik (580 p.)
0 głosów
2 odpowiedzi 280 wizyt
pytanie zadane 30 marca 2016 w C i C++ przez cza213 Początkujący (370 p.)
0 głosów
1 odpowiedź 285 wizyt

92,632 zapytań

141,502 odpowiedzi

319,882 komentarzy

62,015 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!

...