[C++, polimorfizm] unresolved external symbol "public: virtual void __thiscall Dodanie::add(void)"
Ostatnio zmodyfikowano 2015-01-24 16:17
lshadown Temat założony przez niniejszego użytkownika |
[C++, polimorfizm] unresolved external symbol "public: virtual void __thiscall Dodanie::add(void)" » 2015-01-24 15:12:27 Witajcie Visual wywala mi dziwny błąd : Error 1 error LNK2001: unresolved external symbol "public: virtual void __thiscall Dodanie::add(void)" (?add@Dodanie@@UAEXXZ) E:\ZUT\Programowanie Obiektowe\Projekt4\main.obj Projekt4
Plik z klasami : #ifndef head_h #define head_h #include <iostream> #include <math.h> #include <string> using namespace std; class Baza { protected: string tytul; string autor; string gatunek; int nr_ks; public: Baza() { }; ~Baza() { }; virtual void add( void ) = 0; }; class Dodanie : virtual public Baza { protected: Dodanie ** baza; public: virtual void add( void ); void print(); bool sprawdzenie( string name ); void del( string name ); void kasTab(); void search( string name ); }; class Wypozyczalnia : virtual public Baza { protected: string imie; string nazwisko; Wypozyczalnia * osoba; public: Wypozyczalnia ** baza_osob; virtual void add(); void del( string name ); void kasTab(); Wypozyczalnia() : osoba( new Wypozyczalnia ) { }; };
#endif
Dodanie::add -> tu gdzie jest błąd virtual void Dodanie::add( void ) { cout << endl << " Tytuł ksiazki : "; cin >> klient->tytul; cout << endl << " Autor:"; cin >> klient->autor; cout << endl << " Gatunek : "; cin >> klient->gatunek; cout << " Numer ID:"; cin >> klient->nr_ks; if( licznik_ksiazek == 1 ) { baza = new Dodanie *[ licznik_ksiazek ]; for( int i = 0; i < licznik_ksiazek; i++ ) { baza[ i ] = new Dodanie; baza[ i ]->tytul = klient->tytul; baza[ i ]->gatunek = klient->gatunek; baza[ i ]->autor = klient->autor; baza[ i ]->nr_ks = klient->nr_ks; } } else { int wielkosc = licznik_ksiazek - 1; int staraWielkosc = wielkosc; Dodanie ** nowaTab = new Dodanie *[ licznik_ksiazek ]; for( int i = 0; i < staraWielkosc; i++ ) { nowaTab[ i ] = baza[ i ]; } for( int i = staraWielkosc; i < licznik_ksiazek; i++ ) { nowaTab[ i ] = new Dodanie; nowaTab[ i ]->tytul = klient->tytul; nowaTab[ i ]->gatunek = klient->gatunek; nowaTab[ i ]->autor = klient->autor; nowaTab[ i ]->nr_ks = klient->nr_ks; kasTab(); } baza = nowaTab; } licznik_ksiazek++; }
I tutaj próbuje wywołać metodę z klasy Dodanie void main() { menu(); } void menu() { Dodanie * test = new Dodanie; test->add(); }
Z góry dzięki za pomoc. |
|
DejaVu |
» 2015-01-24 16:17:05 1. Słów kluczowych void nie pisze się jako argument w celu zasygnalizowania, że funkcja/metoda nie przyjmuje żadnych argumentów. 2. Słowa kluczowego virtual nie pisze się przed implementacją metody, jeżeli jest ona implementowana poza definicją klasy, tj. 3. Komunikat mówi, że nie udało się znaleźć metody na poziomie linkera, a nie na poziomie wykonania aplikacji, więc błąd nie dotyczy miejsca, które przytoczyłeś. 4. Sposób w jaki przedstawiłeś kod sugeruje, że nie jest to jeden plik, więc prawdoposobnie nie dodałeś pliku zawierającego implementację Dodanie::add do projektu, więc nie jest on kompilowany i tym samym linker nie widzi implementacji wspomnianej metody. |
|
« 1 » |