错误:隐式声明的副本构造函数的定义 我现在正在处理一个QT C++项目。这是一个新的部分,我正在覆盖,我发现它有点混乱。我创建了一些由股票、债券和储蓄类继承的资产类别。这一切都很好。然后我创建了一个名为AssetList的类,它派生了QList,这个类就是我发现问题的地方
这是我到目前为止的代码 资产清单h错误:隐式声明的副本构造函数的定义 我现在正在处理一个QT C++项目。这是一个新的部分,我正在覆盖,我发现它有点混乱。我创建了一些由股票、债券和储蓄类继承的资产类别。这一切都很好。然后我创建了一个名为AssetList的类,它派生了QList,这个类就是我发现问题的地方,c++,qt,copy-constructor,C++,Qt,Copy Constructor,这是我到目前为止的代码 资产清单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(QStri
#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
\ifndef资产清单\u H
#定义资产清单
#包括“资产.h”
#包括
类AssetList:公共QList
{
公众:
AssetList(){}
~AssetList();
bool addAsset(资产*);
资产*findAsset(QString);
双总值(QString);
};
#恩迪夫
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;
}
#包括“AssetList.h”
AssetList::AssetList(const AssetList&):QList(){}
AssetList::~AssetList()
{
qDeleteAll(*本);
清除();
}
bool资产列表::addAsset(资产*a)
{
QString desc=a->getDescription();
资产*重复=findAsset(描述);
如果(重复==0)
{
附加(a);
返回true;
}
其他的
{
删除副本;
返回false;
}
}
资产*资产列表::findAsset(QString desc)
{
对于(int i=0;igetDescription()==desc)
{
返回(i);
}
}
返回0;
}
double AssetList::totalValue(QString类型)
{
双和=0;
对于(int i=0;igetType()==type)
{
总和+=在(i)->值();
}
}
回报金额;
}
我现在遇到的错误是编译错误:错误:隐式声明的复制构造函数的定义
我不太清楚这意味着什么,我一直在谷歌搜索教科书,没有找到多少。有谁能帮助我或者让我朝着正确的方向去解决这个问题吗
提前谢谢 您可以定义一个复制构造函数:
AssetList::AssetList(const AssetList&) : QList<Asset*>(){}
如果我只是从AssetList.h文件中删除声明,我会得到完全相同的错误:/Or我误解了您的意思。@nickcorin:您需要向类定义中添加声明:
AssetList(const AssetList&)代码>@nickcorin在显示要使用的头文件中,没有复制构造函数的声明。你需要把它添加到课堂上。很抱歉我误解了你!非常感谢您,这非常有效!:)你能解释为什么我需要空白构造函数和复制构造函数,并且很诚实地说什么是“复制构造函数”。资产清单l2=l1
在第二个声明中,对l2
对象调用复制构造函数,并将l1
作为参数传递。你可能还想读一下。
class AssetList : public QList<Asset*>
{
public:
AssetList(){}
~AssetList();
AssetList(const AssetList&); // Declaring the copy-constructor
...
};