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

[C++, polimorfizm] unresolved external symbol "public: virtual void __thiscall Dodanie::add(void)"

Ostatnio zmodyfikowano 2015-01-24 16:17
Autor Wiadomość
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 :
C/C++
#ifndef head_h
#define head_h
#include <iostream>
#include <math.h>
#include <string>
using namespace std;
class Baza // klasa abstrakcyjna
{
protected:
    string tytul;
    string autor;
    string gatunek;
    int nr_ks;
public:
    Baza() { };
    ~Baza() { };
    virtual void add( void ) = 0;
};
class Dodanie
    : virtual public Baza // dziedziczenie
{
protected:
    Dodanie ** baza;
public:
    //------------------------------------DLA PRACOWNIKOW BIBLIOTEKI-----------------
    virtual void add( void );
    void print();
    bool sprawdzenie( string name );
    void del( string name );
    void kasTab();
    //-----------------------------------DLA KLIENTOW--------------------------------------
    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
C/C++
virtual void Dodanie::add( void )
{
    //wczytywanie danych od użytkownika
   
    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;
    // dodawanie danych do tablic wskaznikow
    if( licznik_ksiazek == 1 ) // sprawdzenie czy to jest pierwszy pracownik
    {
        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 //czyli film  juz jakis jeden jest
    {
        int wielkosc = licznik_ksiazek - 1;
        int staraWielkosc = wielkosc; //Stara wielkosc zostanie ostatnim elementem.
        Dodanie ** nowaTab = new Dodanie *[ licznik_ksiazek ]; // tworzymy pomocnicza tablice wskaznikow
       
        for( int i = 0; i < staraWielkosc; i++ )
        {
            nowaTab[ i ] = baza[ i ]; // Przekazujemy wartosci starej tablicy do nowej
        }
        for( int i = staraWielkosc; i < licznik_ksiazek; i++ )
        { //tworzymy nowego prcownika
            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;
            // usuwamy stara tablice
            kasTab();
        }
        baza = nowaTab; // przekazujemy z nowej tablicy dane do starej
       
    }
    licznik_ksiazek++;
}
I tutaj próbuje wywołać metodę z klasy Dodanie
C/C++
void main()
{
    menu();
}
void menu()
{
    Dodanie * test = new Dodanie;
    test->add();
}
Z góry dzięki za pomoc.
P-125477
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.
C/C++
typ Klasa::metoda(...)
{
}
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.
P-125483
« 1 »
  Strona 1 z 1