子类调用超类构造函数

Child class calling superclass constructor

本文关键字:构造函数 超类 调用 子类      更新时间:2023-10-16

我对c++很陌生,我正试图建立一个继承另一个类的类。在本例中,我有一个超类DataScraper,它应该有两个子类,JSONDataScraper和XMLDataScraper。嗯…这行不通。当我编译时,我得到以下消息:

'identifier':构造函数初始化列表只允许在构造函数定义中使用(C2250)

datascraper.h

#include <string>
#include <vector>
#include <Qstring>
class DataScraper
{
private:
    std::vector<QString> GetFiles(const QString folder);
protected:
    std::vector<QString> filesToAnalyze;
public:
    DataScraper(const QString folderPath);
    DataScraper(const std::vector<QString>& paths);
};

datascraper.cpp

#include "datascraper.h"
#include "Windows.h"
DataScraper::DataScraper(const std::vector<QString>& paths)
{
    //...
}
DataScraper::DataScraper(const QString folderPath)
{
    //...
}
std::vector<QString> DataScraper::GetFiles(const QString folder)
{
    //...
}

现在,JSONDataScraper文件。

#include "rapidjson.h"
#include "datascraper.h"
#include "streamreader.h"
#include <QString>
class JSONDataScraper : public DataScraper
{
private:
    StreamReader *FileContentsReader;
public:
    JSONDataScraper(QString folderPath);
    JSONDataScraper(std::vector<QString> files);
};

jsondatascraper.cpp

#include "jsondatascraper.h"
#include "streamreader.h"
#include "datascraper.h"
#include <QString>
JSONDataScraper::JSONDataScraper(const std::vector<QString>& paths) : DataScraper(paths)
{
    //...
}
JSONDataScraper::JSONDataScraper(const QString& pathToFile) : DataScraper(pathToFile)
{
    //...
}

我该怎么办?

JSONDataScraper的构造函数在声明和定义中分别有不同的形参列表。您应该有另一个错误消息。

您的定义因此不会被识别为已声明的构造函数,因此元素初始化器在此处无效。

JSONDataScraper(std::vector<QString> files);
JSONDataScraper::JSONDataScraper(const std::vector<QString>& paths) : DataScraper(paths)
//                               ^^^^^^                    ^
{
   //...
}
JSONDataScraper(QString folderPath);
JSONDataScraper::JSONDataScraper(const QString& pathToFile) : DataScraper(pathToFile)
//                               ^^^^^^       ^
{
    //...
}

你基本上把你的编译器搞糊涂了。

修复参数列表以匹配,然后一切都应该没问题。