Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
继承的类需要基类构造函数的参数 我在C++ CLR中做了2个托管类,并且在基类上有一个构造函数。派生类是从基类继承的,我认为,由于父类上的构造函数的参数不等于void,因此当我调用它以进行继承时,它需要构造函数的参数。我相信这一点,因为当我停止继承时,错误就会消失。我不能在继承了参数后就把它放进去,所以我的问题是如何在不要求构造函数参数的情况下让它被继承_C++_Oop_C++ Cli - Fatal编程技术网

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

继承的类需要基类构造函数的参数 我在C++ CLR中做了2个托管类,并且在基类上有一个构造函数。派生类是从基类继承的,我认为,由于父类上的构造函数的参数不等于void,因此当我调用它以进行继承时,它需要构造函数的参数。我相信这一点,因为当我停止继承时,错误就会消失。我不能在继承了参数后就把它放进去,所以我的问题是如何在不要求构造函数参数的情况下让它被继承,c++,oop,c++-cli,C++,Oop,C++ Cli,以下是我的全部错误: 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

以下是我的全部错误:

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数据库 定义数据库 使用名称空间系统; 使用名称空间System::Data::SqlClient; ref类连接数据库{ 受保护的: SqlConnection^cnn; 字符串^sql\u文件; 布尔州; 公众: 文件中的ConnectDBSystem::String^; 布尔连接数据库; ~ConnectDBvoid; }; ref类查询:公共连接数据库{ 私人: 公众: }; 恩迪夫 这是我的cpp文件:

include Query.h 文件中的ConnectDB::ConnectDBSystem::String^{ sql\u file=System::IO::file::ReadAllTextin\u file; } boolconnectdb::ConnectDataBase{ 字符串^connectionString=数据源=WIN-50GP30FGO75;初始目录=DEMOB;用户ID=sa;密码=demol23; SqlConnection ^cnn=gcnew SqlConnectionconnectionString; cnn->Open; 状态=真; 返回true; } ConnectDB::~ConnectDB{ cnn->Close; } 注意:头文件只是代码的一部分-在本例中,它显示声明,即类的规范。大概您有一个包含这些方法的实际实现的文件


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

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

由于基类没有默认构造函数,因此需要执行以下操作:

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

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

我很遗憾,我没有添加cpp源代码,我只是添加了它。谢谢。我知道我必须以某种方式申报,我只是不知道如何申报。总有一天老师会开始给予它应得的尊重。直到那时…@ USER481301 C++是很难的,而且还有很多学生需要理解。虽然如果我们能一次正确地将少量药物分层会很好,但其中一些药物是奇怪地交织在一起的。旁注:我知道这是CLI,但你可能想通过观察药物浓度来掩盖你的屁股。假设您意外复制了一个ConnectDB实例。您将有两个对象,都引用相同的SqlConnection。当副本超出范围时,它就会关闭;把另一份弄残。在这种情况下,我将禁用复制构造函数和赋值运算符,这样您就不会发生意外。@ComyarD如果您没有给出In_文件,例如@JosephLarson answer?@user4581301中的案例,那么会发生什么情况?感谢您提醒我删除其中的声明,并用为中的声明所做的定义替换它.h文件。当我将声明移动到h文件时,我忘了更改它。@MrR我计划用我创建的sql文件的路径替换,因此script.sqls只需要将它们声明为private,即private:ConnectDBConnectDB const&;赋值操作也一样。不需要任何实现-只是额外的语法来防止复制[如果无意中尝试复制,将出现问题中的错误]。