2016-09-16 110 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) 
//        ^^^^^^  ^
{ 
    //... 
} 

你基本上混淆了你的編譯器。

修復參數列表匹配,一切都應該罰款。

相關問題