子类调用超类构造函数
Child class calling superclass constructor
我对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)
// ^^^^^^ ^
{
//...
}
你基本上把你的编译器搞糊涂了。
修复参数列表以匹配,然后一切都应该没问题。
相关文章:
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 参数包构造函数在类模板中隐藏用户定义的转换
- 具有已删除移动和复制构造函数的类的就地构造
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- C++构造函数和类?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 如何在其他类中使用参数化构造函数制作类的对象?
- 具有值包装器的可变参数模板构造函数的类构造函数优先级
- 如何使用私有构造函数对类进行单元测试?
- c++17在编译时将带有已删除复制构造函数的类添加到std::vector
- 从作为模板参数传递给构造函数的类继承,或者从它们继承
- 继承的构造函数忽略类内初始化
- 模板和隐式构造函数的类定义之外的友元声明
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- C++ - 从另一个类构造函数调用类构造函数
- 定义结构中没有默认构造函数的类
- 我可以将 std::move 与不提供 move 构造函数的类一起使用吗?
- 是否可以默认初始化具有已删除默认构造函数的类类型
- C++具有移动和复制构造函数的类中的代码重复
- 没有默认构造函数的类对象的值初始化