2014-03-31 3 views
4

У меня возникли проблемы с проектом Qt C++, над которым я сейчас работаю. Это новый раздел, который я покрываю, и я нахожу его немного запутанным. Я создал несколько классов Asset, которые наследуются классами Stock, Bond и Savings. Все было в порядке. Затем я создал класс под названием AssetList, который получил QList, этот класс, где я нашел проблему.ошибка: определение неявно объявленного экземпляра копии

Вот код, который у меня есть.

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; 
} 

Ошибка я получаю на данный момент ошибка компиляции: error: definition of implicitly declared copy constructor Я не совсем уверен, что это значит, я «Мы гуляли и смотрели в учебнике и не нашли многого. Может ли кто-нибудь помочь мне или поставить меня в правильном направлении, чтобы понять это?

Заранее благодарен!

ответ

10

Вы определить конструктор копирования:

AssetList::AssetList(const AssetList&) : QList<Asset*>(){} 

Но вы не объявить это в AssetList классе.

Вы должны добавить:

class AssetList : public QList<Asset*> 
{ 
public: 
    AssetList(){} 
    ~AssetList(); 
    AssetList(const AssetList&); // Declaring the copy-constructor 

    ... 
}; 
+0

Если я просто удалить объявление из файла AssetList.h, я получаю точно такую ​​же ошибку:/Или я недоразумение, что вы говорите. – nickcorin

+0

@nickcorin: вам нужно * добавить * объявление в определение класса: 'AssetList (const AssetList &);' –

+0

@nickcorin В файле заголовка, который вы показываете использовать, нет объявления конструктора-копии. Вам нужно добавить его в класс. –

Смежные вопросы