C++ 纯虚函数调用错误
我经常遇到一个错误,上面写着“纯虚拟函数调用”。 经过一些研究,我发现这种错误通常发生在从抽象基类的构造函数或析构函数调用纯虚方法时。 然而,这不是我的代码的问题,在花了几个小时试图找到解决方案后,我意识到我需要帮助:) 这是基类:C++ 纯虚函数调用错误,c++,virtual-functions,C++,Virtual Functions,我经常遇到一个错误,上面写着“纯虚拟函数调用”。 经过一些研究,我发现这种错误通常发生在从抽象基类的构造函数或析构函数调用纯虚方法时。 然而,这不是我的代码的问题,在花了几个小时试图找到解决方案后,我意识到我需要帮助:) 这是基类: class Radnik { string ime; double procenat; Radnik(const Radnik& r) = delete; Radnik& operator = (const Radnik& r) = de
class Radnik {
string ime;
double procenat;
Radnik(const Radnik& r) = delete;
Radnik& operator = (const Radnik& r) = delete;
public:
Radnik(string i, double p) : ime(i), procenat(p) {}
virtual ~Radnik() {}
virtual double prihod() = 0;
4)…最后在这里,它为抽象基类调用函数prihod()
double plata() { return prihod()*procenat / 100; }
3)。。。这里是ˇ
friend ostream& operator << (ostream& it, Radnik& r) { return it << r.ime << " / " << r.plata()<<endl; }
};
friend ostream& operator << (ostream& it, Firma& f)
{ for (int i = 0; i < f.rm; i++)
{ it << "Radnik broj " << i + 1 << " ( " << *f.niz[i] << " )" << endl;
return it << f.dobit(); } }
};
friend-ostream&operator>brp;
如果(i+brp>=n)抛出G_fpun();
Sef sf(im、pro、brp);f+=sf;
对于(intj=0;jii>>
proo>>prii;Prodavac p2(ii,proo,prii);f+=p2;i++;}
}
}
cout您正在代码中创建临时变量,然后将它们传递给+=
运算符,该运算符保留指向这些临时变量的指针,这些临时变量随后会被销毁:
Prodavac p1(im, pro, pri); f += p1;
当您访问存储在Firma
中的(现在无效)引用时,这会导致未定义的行为。在这种特定情况下,由于引用的对象已被销毁,vtable已回滚到基类(其中包含纯虚拟函数),这将导致您的错误。由于格式错误,您的代码很难读取。您实际在哪里提供prihod()成员函数的定义?与rici一致,prihod方法是抽象的,我想其中一个派生类没有实现它。你甚至可以使用Radnik本身,它有一个抽象的方法。。。当您使用C++1x元素(=delete、nullptr等)时,为什么不用智能指针替换**、new和delete元素呢?
cout << "Koliko radnika ima firma i koja joj je marza (u procentima) ?";
int n; double m; cin >> n >> m;
Firma f(n, m);
for (int i = 0; i < n; i++)
{
cout << "\nDa li je radnik broj " << i + 1 << "prodavac (p) ili sef (s) ?";
char izb; cin >> izb;
if (izb == 'p' || izb == 'P') { cout << "\nIme, procenat zarade od prihoda i
prihodi prodavca ?\n"; string im; double pro, pri; cin >> im >> pro >> pri;
Prodavac p1(im, pro, pri); f += p1; }
if (izb == 's' || izb == 'S') {
cout << "Ime, procenat zarade od prihoda i broj podredjenih ?";
string im; double pro; int brp; cin >> im >> pro >> brp;
if (i + brp>=n) throw G_fpun();
Sef sf(im, pro, brp); f += sf;
for (int j = 0; j < brp; j++){ cout << "\nIme, procenat zarade od prihoda i
prihodi prodavca ?\n";
string ii; double proo; double prii; cin >> ii >>
proo >> prii; Prodavac p2(ii, proo, prii); f += p2; i++; }
}
}
cout << f;
Prodavac p1(im, pro, pri); f += p1;