#include <iostream>
#define LICZBA_ELEMENTOW 5
using namespace std;
class element {
protected:
double prad;
double napiecie;
double moc;
double czestotliwosc;
std::string nazwa;
public:
virtual ~element(){};
element() {nazwa = "element"; czestotliwosc = 1.0; napiecie = prad = moc = 0.0;}
element(const std::string arg) {nazwa = arg; napiecie = czestotliwosc = 1.0; prad = moc = 0.0;}
virtual void wymuszenieU(double) = 0;
friend void obwod(element*, element*);
virtual void setName();
virtual void getName();
};
void obwod(element *e1, element *e2) {
bool pradMatch = false;
bool napiecieMatch = false;
if (e1->prad == e2->prad) {
pradMatch = true;
}
if (e1->napiecie == e2->napiecie) {
napiecieMatch = true;
}
if ((pradMatch && !napiecieMatch) || (!pradMatch && napiecieMatch)) {
//std::string matchType = (pradMatch)?"prad":"napiecie";
std::string matchType;
if (pradMatch) {
matchType = "prad";
} else {
matchType = "napiecie";
}
cout << "elementy: " << e1->nazwa.c_str() << " oraz: " << e2->nazwa.c_str() << " maja taki sam: " << matchType.c_str() << endl;
} else {
if (pradMatch && napiecieMatch) {
cout << "elementy: " << e1->nazwa.c_str() << " oraz: " << e2->nazwa.c_str() << " sa nieokreslone." << endl;
} else {
cout << "elementy: " << e1->nazwa.c_str() << " oraz: " << e2->nazwa.c_str() << " sa nie polaczone." << endl;
}
}
}
class cewka : public element {
protected:
double L;
public:
// ~cewka();
cewka() {nazwa = "cewka"; L = 1.0;}
cewka(const std::string arg) {nazwa = arg; L = 1.0;}
cewka(const std::string arg, double argL) {nazwa = arg; L = argL;}
void wymuszenieU(double);
void setName();
void getName();
};
void cewka::setName(){
cout << "Podaj nazwê elementu cewki: " << endl;
cin >> nazwa;
}
void cewka::getName(){
cout << "Nazwa cewki to: " << nazwa << endl;
}
class rezystor : public element {
double R;
public:
rezystor() {nazwa = "rezystor"; R = 1.0;}
rezystor(const string arg) {nazwa = arg; R = 1.0;}
rezystor(const string arg, double argR) {nazwa = arg; R = argR;}
void setName();
void getName();
};
class kondensator : public element {
double C;
public:
kondensator() {nazwa = "kondensator"; C = 1.0;}
kondensator(const string arg) {nazwa = arg; C = 1.0;}
kondensator(const string arg, double argC) {nazwa = arg; C = argC;}
void setName();
void getName();
};
void cewka::wymuszenieU(double u) {
napiecie = u;
if (czestotliwosc > 0.0) {
prad = u/(6.28*czestotliwosc*L);
}
}
int main() {
element* tab[LICZBA_ELEMENTOW];
for (int i=0; i<(LICZBA_ELEMENTOW); i++) {
tab[0] = new cewka("cewka1");
}
tab[0] = new cewka("cewka1");
tab[1] = new cewka("cewka2", 3.0);
tab[2] = new cewka("cewka3");
tab[3] = new cewka("cewka4", 3.0);
tab[4] = new cewka("cewka5", 3.0);
tab[0]->wymuszenieU(5);
tab[1]->wymuszenieU(5);
for (int i=0; i<(LICZBA_ELEMENTOW-1); i++) {
for (int j=i+1; j<LICZBA_ELEMENTOW; j++) {
obwod(tab[i], tab[j]);
}
}
for (int i=0; i<LICZBA_ELEMENTOW; i++) {
delete tab[i];
}
return 0;
}
Po próbie skompilowania programu wyświetla się komunikat "undefined reference to 'vtable for element' " i nie mam pojęcia jak do tego podejść. z góry dziękuje :)