2010-03-03 5 views
2

J'ai un programme média. j'ajoute le CD, le DVD, l'information de livre. J'ai réussi à obtenir l'information du livre ajouté à l'ensemble. J'ajoute maintenant l'info CD. J'ai ajouté la plupart des informations sur le Cd mais j'ai une fonction séparée pour ajouter des membres du groupe. C'est où j'ai besoin d'aide!Ajouter à un ensemble STL - C++

Je reçois une erreur de casting: erreur C2440: 'type cast': ne peut pas convertir 'const Article * const' à 'CD'

CD.h

#ifndef CD_H 
#define CD_H 
#pragma once 
#include "item.h" 

class CD : public Item 
{ 
public: 

    CD(const string& theTitle, const string& theBand, const int snumber); 
    const string addBandMember(const string& member); 
    const int getNumber() const; 
    const string getMusician() const; 

    const string getBand() const; 
    virtual void print(ostream& out) const; 
    ~CD(); 


private: 

    string band; 
    string musicians; 
    string title; 
    int number; 

}; 

ostream& operator<<(ostream& out, const CD* cd); 

#endif 

CD.cpp

const string CD::addBandMember(const string &member) 
{ 

    return this->musicians = member; 

} 

Répondre

0

Dans Library::addBandMember vous essayez de jeter un pointeur sur un type de classe
vous devez jeter à CD* pas CD

Et vous ne voulez probablement pas le 2 const dans

const Item* const musicCD 

puisque vous voulez modifier le musicCD!

Enfin votre méthode CD::addBandMember ne semble pas ajouter un membre du groupe mais le remplacer.

+0

le pointeur a fait l'affaire merci .. –

+0

oui mais vous avez besoin de le transformer en un >> pointeur << vers un CD. vous ne pouvez pas jeter un pointeur sur un CD cela n'a aucun sens - vous avez édité votre commentaire avant que je puisse envoyer le mien :) –

0

Vous devez changer la signature de

void Library::addBandMember(const Item* const musicCD, const string& member)

à

void Library::addBandMember(const Item* musicCD, const string& member)

comme méthode addBandMember() ne modifie en effet l'instance d'objet, si l'article ne peut pas être const. Ensuite, vous devez le convertir en CD * en utilisant dynamic_cast, car il s'agit d'un downcast.

+0

problème est CD a sa propre classe, il hérite de l'élément. Donc, il n'y a pas de CD musical.addband car il n'existe pas dans l'élément. il existe en classe CD. –

+0

Oups, à droite. Ensuite, vous devez lancer, de préférence avec dynamic_cast. – pajton