erreur: définition de la déclarées implicitement constructeur de copie
Je vais avoir des problèmes avec un Qt C++ Projet sur lequel je travaille en ce moment. C'est une nouvelle rubrique que je suis couvrant et je suis un peu confus. J'ai créé des classes d'Actifs qui est héritée par Actions, des Obligations d'Épargne et de classes. Tout cela était bien. Ensuite, j'ai créé une catégorie appelée AssetList dérivé de QList, cette classe est l'endroit où j'ai trouvé le problème.
Voici le code que j'ai jusqu'ici.
AssetList.h
#ifndef ASSET_LIST_H
#define ASSET_LIST_H
#include "Asset.h"
#include <QString>
class AssetList : public QList<Asset*>
{
public:
AssetList(){}
~AssetList();
bool addAsset(Asset*);
Asset* findAsset(QString);
double totalValue(QString);
};
#endif
AssetList.cpp
#include "AssetList.h"
AssetList::AssetList(const AssetList&) : QList<Asset*>(){}
AssetList::~AssetList()
{
qDeleteAll(*this);
clear();
}
bool AssetList::addAsset(Asset* a)
{
QString desc = a->getDescription();
Asset* duplicate = findAsset(desc);
if(duplicate == 0)
{
append(a);
return true;
}
else
{
delete duplicate;
return false;
}
}
Asset* AssetList::findAsset(QString desc)
{
for(int i = 0 ; i < size() ; i++)
{
if(at(i)->getDescription() == desc)
{
return at(i);
}
}
return 0;
}
double AssetList::totalValue(QString type)
{
double sum = 0;
for(int i = 0 ; i < size() ; i++)
{
if(at(i)->getType() == type)
{
sum += at(i)->value();
}
}
return sum;
}
L'erreur que je reçois à l'instant est une erreur de compilation: error: definition of implicitly declared copy constructor
je ne suis pas tout à fait sûr de ce que cela signifie, j'ai été googler autour et en regardant dans le livre et n'ai pas trouvé grand chose. Quelqu'un peut m'aider ou me mettre dans le bon sens de comprendre cela?
Merci d'avance!
OriginalL'auteur nickcorin | 2014-03-31
Vous devez vous connecter pour publier un commentaire.
Vous définir un constructeur de copie:
Mais vous n'avez pas déclarer dans le
AssetList
classe.Vous devez l'ajouter:
Vous devez vous add une déclaration à la définition de la classe:
AssetList(const AssetList&);
Dans le fichier d'en-tête que vous vous montrez, il n'y a pas de déclaration du constructeur par copie. Vous devez l'ajouter à la classe.
Droit désolé j'ai mal compris! Merci beaucoup cela a parfaitement fonctionné! 🙂 Pourriez-vous expliquer pourquoi j'ai besoin de la vierge constructeur et le constructeur de copie et honnêtement, ce qu'est un "constructeur de copie".
C'est pour quand vous n'avez par exemple
AssetList l1; AssetList l2 = l1;
Dans la deuxième déclaration du constructeur par copie est appelée sur lel2
objet, avecl1
passé en argument. Vous pouvez aussi lire sur la règle des trois.OriginalL'auteur Some programmer dude