继承 class 需要基础 class 构造函数的参数
Inherited class needs parameter for base class constructor
我在 C++ clr 中创建了 2 个托管 classes,并且我在基础 class 上有一个构造函数。派生的 class 是从基类继承的,我相信由于我在父类 class 上的构造函数的参数不等于 void,所以当我调用它进行继承时,它需要一个参数构造函数。我相信这是因为当我停止继承时,错误就会消失。我不能在继承它之后只放置 (parameter),所以我的问题是如何在不为构造函数请求参数的情况下让它被继承。
这是我的完整错误:
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();
}
注意: 头文件只是代码的一部分 - 在这种情况下它显示声明(即 classes 的规范)。大概您有一个包含这些方法的实际实现的文件。
代码缺少 Query
class 上构造函数的声明。实现将需要调用 1 arg 构造函数,但声明不需要指明。
您的 subclass 不需要带参数的构造函数,但所有构造函数都需要正确调用基础 class 构造函数。
由于基础 class 没有默认构造函数,您需要执行以下操作:
class Query : public ConnectDB{
private:
public:
Query(): ConnectDB("") { ... }
};
问题是,除非您想将输入的值硬编码到 ConnectDB
,否则您的基础 class 可能需要一个带有字符串参数的构造函数,以便您可以将其转发到 ConnectDB's
构造函数。
我在 C++ clr 中创建了 2 个托管 classes,并且我在基础 class 上有一个构造函数。派生的 class 是从基类继承的,我相信由于我在父类 class 上的构造函数的参数不等于 void,所以当我调用它进行继承时,它需要一个参数构造函数。我相信这是因为当我停止继承时,错误就会消失。我不能在继承它之后只放置 (parameter),所以我的问题是如何在不为构造函数请求参数的情况下让它被继承。
这是我的完整错误:
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();
}
注意: 头文件只是代码的一部分 - 在这种情况下它显示声明(即 classes 的规范)。大概您有一个包含这些方法的实际实现的文件。
代码缺少 Query
class 上构造函数的声明。实现将需要调用 1 arg 构造函数,但声明不需要指明。
您的 subclass 不需要带参数的构造函数,但所有构造函数都需要正确调用基础 class 构造函数。
由于基础 class 没有默认构造函数,您需要执行以下操作:
class Query : public ConnectDB{
private:
public:
Query(): ConnectDB("") { ... }
};
问题是,除非您想将输入的值硬编码到 ConnectDB
,否则您的基础 class 可能需要一个带有字符串参数的构造函数,以便您可以将其转发到 ConnectDB's
构造函数。