子类调用超类构造函数

时间:2016-09-16 15:41:15

标签: c++

我对C ++很陌生,我试图建立一个从另一个继承的类。在这种情况下,我有一个超类DataScraper应该有两个子节点,JSONDataScraper和XMLDataScraper。嗯......它不起作用。当我编译时,我收到以下消息:

  

'标识符' :构造函数初始化列表仅允许在构造函数定义(C2250)

上使用

datascraper.h

#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)
{
    //...
}

datascraper.cpp

#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文件。

#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.cpp

document.getElementsByClassName()

我该怎么办?

1 个答案:

答案 0 :(得分:2)

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

因此,您的定义不会被识别为声明的构造函数,因此 ctor-initialiser 在那里无效。

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

JSONDataScraper(QString folderPath);
JSONDataScraper::JSONDataScraper(const QString& pathToFile) : DataScraper(pathToFile)
//                               ^^^^^^       ^
{
    //...
}

你基本上混淆了你的编译器。

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