2016-09-16 81 views
-3

我很新的C++,我试图建立一个从另一个继承的类。在这种情况下,我有一个超类DataScraper,它应该有两个孩子,JSONDataScraper和XMLDataScraper。呃...它不起作用。当我编译,我得到以下信息:子类调用超类的构造函数

'标识':构造函数初始化列表只能在构造函数中定义(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) 
{ 
    //... 
} 

我能做些什么?

+0

第一步 - 构建一个[MCVE]。 –

+0

Re:“超级班”和“孩子们”:使用一致的术语。 “超级”与“子级”一起,“小孩”与“父级”一起。但是,如果你真的想要一致性,请使用语言定义中使用的术语:“基类”和“派生类”。 –

回答

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

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

修复参数列表匹配,一切都应该罚款。

相关问题