Estoy haciendo un programa que consiste en una biblioteca que puede almacenar una serie de items, que son guardados en un vector (ficha). La clase CFicha es abstracta y es la clase base para todas las demás (libros, revistas, etc...). Aquí les dejo la clase CBiblioteca:
Código
Mi problema se da en el método 'operator=' y 'AnyadirFicha()', los cuales son definidos así:
class CBiblioteca { vector<CFicha *> ficha; public: //basico CBiblioteca(); CBiblioteca(const CBiblioteca&); ~CBiblioteca(); CBiblioteca operator=(const CBiblioteca&); CFicha* operator[](unsigned); //funciones void AnyadirFicha(CFicha&); int BuscarFicha(const string) const; //eliminar siguiente ? bool EliminarFicha(unsigned); bool MostrarFicha(unsigned); bool MostrarBiblioteca(void); };
Código
y
CBiblioteca CBiblioteca::operator=(const CBiblioteca& bib) { //primero vaciamos la matriz for(int i = 0; i < ficha.size(); i++) delete ficha[i]; ficha.clear(); //ahora copiamos los elementos for(int i = 0; i < bib.ficha.size(); i++) ficha.push_back(new CFicha(*(bib.ficha[i]))); return *this; }
Código
ambas me dan los mismos dos errores:
void CBiblioteca::AnyadirFicha(CFicha& ficha) { ficha.push_back(new CFicha(ficha)); }
'class CFicha' has no member named 'push_back'
invalid new-expression of abstract class type 'CFicha'
pero no entiendo por que interpreta que push_back es un método de CFicha y no de la clase vector, así como mi otra duda de si se puede crear un objeto abstracto con el operador new.