2014-03-31 101 views
4

我遇到了我目前正在處理的Qt C++項目的問題。這是我所覆蓋的一個新的部分,我發現它有點混亂。我創建了一些由股票,債券和儲蓄類繼承的類資產。這一切都很好。然後我創建了一個名爲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在您使用的頭文件中沒有複製構造函數的聲明。您需要將其添加到課程中。 –