Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:隐式声明的副本构造函数的定义 我现在正在处理一个QT C++项目。这是一个新的部分,我正在覆盖,我发现它有点混乱。我创建了一些由股票、债券和储蓄类继承的资产类别。这一切都很好。然后我创建了一个名为AssetList的类,它派生了QList,这个类就是我发现问题的地方_C++_Qt_Copy Constructor - Fatal编程技术网

错误:隐式声明的副本构造函数的定义 我现在正在处理一个QT C++项目。这是一个新的部分,我正在覆盖,我发现它有点混乱。我创建了一些由股票、债券和储蓄类继承的资产类别。这一切都很好。然后我创建了一个名为AssetList的类,它派生了QList,这个类就是我发现问题的地方

错误:隐式声明的副本构造函数的定义 我现在正在处理一个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

这是我到目前为止的代码

资产清单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
\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

    ...
};