Mam 2 klasy: klasaA oraz klasaB, klasaB dziedziczy po klasieA. Mam kilka plików: klasaA.h, klasaB.h, klasaB.cpp oraz main.cpp. W klasie A mam metodę czysto wirtualną oraz wirtualny konstruktor. Jednak przy kompilacji tego wszystkiego dostaję takie błędy:
/tmp/ccqoGdHx.o: In function `main':
main.cpp:(.text+0x24): undefined reference to `klasaB::napisz()'
/tmp/ccqoGdHx.o: In function `klasaB::klasaB()':
main.cpp:(.text._ZN6klasaBC1Ev[klasaB::klasaB()]+0x12): undefined reference to `vtable for klasaB'
/tmp/ccqoGdHx.o: In function `klasaB::~klasaB()':
main.cpp:(.text._ZN6klasaBD1Ev[klasaB::~klasaB()]+0x7): undefined reference to `vtable for klasaB'
collect2: ld returned 1 exit status
To moje pliki:
#ifndef __KLASAA_H__
#define __KLASA_H__
class klasaA{
public:
virtual void napisz() = 0;
virtual ~klasaA(){};
};
#endif
#ifndef __KLASAB_H__
#define __KLASAB_H__
#include "klasaA.h"
class klasaB : public klasaA{
public:
void napisz();
virtual ~klasaB(){};
};
#endif
#include "klasaB.h"
#include <iostream>
using namespace std;
void klasaB::napisz(){
cout << "hej" << endl;
}
#include "klasaB.h"
int main(){
klasaB b;
b.napisz();
return 0;
}
Kompilator to gcc, używam ubuntu. Błagam pomóżcie, bo już nie mam pojęcia, co z tym zrobić (proszę nie podawać rozwiązań typu umieść to wszystko w 1 pliku, bo muszę mieć podział na pliki ...)
Zapomniałem dodać, że kompiluję tak: g++ main.cpp -o main - a literówka w kodzie (przez omyłkę napisałem #define KLASA_H zamiast KLASAA_H i tak nic nie zmienia)