Я столкнулся с проблемой, когда перегруженная функция не вызывается, а вместо нее вызывается базовая функция. Я подозреваю, что это связано с разделом вещей между файлами проекта.C++ переопределенная функция не называется
В файлах obj1.h/obj1.cpp У меня есть что-то вроде этого
class obj1{
public:
void print();
};
void obj1::print(){
cout << "obj1::print()";
}
В файлах obj2.h/obj2.cpp У меня есть что-то вроде этого:
#include "obj1.h"
class obj2 : public obj1{
public:
void print();
};
void obj2::print(){
cout << "obj2::print()";
}
В отдельных файлах , я что-то вроде этого:
#include "obj1.h"
class obj3{
public:
vector<obj1*> objlist;
void printobjs();
void addobj(obj1* o);
};
void obj3::printobjs(){
vector<obj1*>::iterator it;
for (it=objList.begin(); it < objList.end(); it++)
(*it)->print();
void obj3::addobj(obj1* o){
objlist.push_back(o);
}
Затем в другом файле:
#include "obj2.h"
obj3 o3;
main(){
obj2* newobj2;
newobj2 = new obj2();
o3.addobj(newobj2);
o3.printobjs();
Моя проблема в том, что printobjs() приводит к вызову obj1.print(). (Я несколько раз искал и читал несколько десятков сообщений с проблемами перегрузки, но не видел подобной проблемы)
Может ли кто-нибудь указать мне в правильном направлении? Благодаря!
функция должна быть 'virtual' за то, что вы хотите. –