微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

继承类需要基类构造函数的参数

如何解决继承类需要基类构造函数的参数

我在 C++ clr 中创建了 2 个托管类,并且我在基类上有一个构造函数。派生类是从基类继承的,我相信由于我在父类上的构造函数的参数不等于 void,所以当我调用它被继承时,它需要一个构造函数的参数。我相信这一点,因为当我停止继承时,错误就会消失。我不能在继承它之后只放置(参数),所以我的问题是如何在不要求构造函数参数的情况下继承它。

这是我的全部错误

Severity    Code    Description Project File    Line    Suppression State
Error   C2512   'ConnectDB': no appropriate default constructor available   Credit Card Storage System  C:\Users\dehla\Desktop\Visual Studio Projects\C++\Credit Card Validator\Query.h 26  

这是我的头文件

#ifndef DATA_BASE
#define DATA_BASE

using namespace System;
using namespace System::Data::sqlClient;

ref class ConnectDB{
protected:
    sqlConnection^ cnn;
    String^ sql_file;
    bool state;

public:
    ConnectDB(System::String^ in_file);
    bool ConnectDataBase();
    ~ConnectDB(void);
};

ref class Query : public ConnectDB{
private:
public:
    
};

#endif 

这是我的 cpp 文件

#include "Query.h"

ConnectDB::ConnectDB(System::String^ in_file){
    sql_file = System::IO::File::ReadAllText(in_file);
}

bool ConnectDB::ConnectDataBase() {
    String^ connectionString = "Data Source=WIN-50GP30FGO75;Initial Catalog=Demodb;User ID=sa;Password=demol23";
    sqlConnection^ cnn = gcnew sqlConnection(connectionString);
    cnn->open();

    state = true;
    return true;
}

ConnectDB::~ConnectDB() {
    cnn->Close();
}

解决方法

您的子类不需要带参数的构造函数,但所有构造函数都需要正确调用基类构造函数。

由于基类没有默认构造函数,你需要做这样的事情:

class Query : public ConnectDB{
private:
public:
    Query(): ConnectDB("") { ... }
    
};

问题是,除非您想将值输入硬编码到 ConnectDB,否则您的基类可能需要一个带有字符串参数的构造函数,以便您可以将其转发给 ConnectDB's 构造函数。

,

注意:头文件只是代码的一部分 - 在这种情况下,它显示了声明(即类的规范)。大概你有一个包含这些方法实际实现的文件。

代码缺少 Query 类上的构造函数声明。实现将需要调用 1 arg 构造函数,但声明不需要指出这一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。