2014-03-31 10 views
4

현재 제가 작업하고있는 Qt C++ 프로젝트에 문제가 있습니다. 그것은 제가 다루고있는 새로운 섹션이며 약간 혼란 스럽습니다. Stock, Bond 및 Savings 클래스에 상속 된 Asset 클래스를 만들었습니다. 이 모든 것이 괜찮 았어. 그런 다음 QList에서 파생 된 AssetList라는 클래스를 만들었습니다.이 클래스는 문제를 발견 한 곳입니다.오류 : 암시 적으로 선언 된 복사 생성자의 정의

여기에 제가 지금까지 가지고있는 코드가 있습니다.

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*>(){} 

을하지만하지 IT는 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 사용하려고하는 헤더 파일에 복사 생성자에 대한 선언이 없습니다. 그것을 클래스에 추가해야합니다. –

관련 문제