错误 C2512 'DerivedClass':没有可用的适当默认构造函数

Error C2512 'DerivedClass' : no appropriate default constructor available

本文关键字:默认 构造函数 DerivedClass C2512 错误      更新时间:2023-10-16

我遇到了此错误问题,添加默认构造函数无法解决它。 不使用默认构造函数进行编译会产生错误,使用默认构造函数进行编译会产生错误。我已经在网上搜索了几个小时,但一无所获。这是我的代码的快速示例(实际代码相当长):

//Header.h
using namespace std;
class BaseClass;
class DerivedClass;
BaseClass *MyClass = new DerivedClass;
class BaseClass
{
    virtual void myFunction()
    {
        cout << "Base Class";
    }
};
class DerivedClass : public BaseClass
{
    void myFunction()
    {
        cout << "Derived Class";
    }
};
//Main.cpp
#include <iostream>
#include "Header.h" //I believe this gives Header.h access to iostream 
                    //I believe it cause it works
using namespace std;
int main()
{
    cout << "Hello";
}
错误在 Header.h

中,Main 只是为了让 Header.h 访问 iostream。正如我所说,我已经寻找了几个小时。并且没有找到任何修复错误的方法:错误 C2512:"派生类":没有合适的默认构造函数可用

为什么在头文件中需要这个?

Baseclass *MyClass = new DerivedClass;

显然,编译器正在寻找类的定义derived直到此行执行才找到。

实现derived类后或在main中移动它。

Baseclass *MyClass = new DerivedClass;

应该在类的定义之后,即文件的结尾

附言您在代码中的评论(关于授予对iostream的访问权限)是正确的。但认为这不是好的做法。头文件应在编译时不需要不同的包含项。

.h 中实例化 MyClass 对象也不是很好的做法。

您的程序完全无效。

您为类派生类分配内存,但尚未定义。

Baseclass *MyClass = new DerivedClass;

使用标准输出流

cout << "Base Class";

但它尚未声明,因为没有声明流的相应标头。

函数myFunction的定义没有意义,因为它具有私有访问控制,并且可能不会调用类本身的外部方法,但没有这样的方法。

正确的代码可能如下所示

//Header.h
#include <iostream>
using namespace std;
class BaseClass
{
public:
    virtual void myFunction() const
    {
        cout << "Base Class";
    }
};
class DerivedClass : public BaseClass
{
public:
    void myFunction() const
    {
        cout << "Derived Class";
    }
};
//Main.cpp
#include <iostream>
#include "Header.h" //I believe this gives Header.h access to iostream 
                    //I believe it cause it works
using namespace std;
Baseclass *MyClass = new DerivedClass;
int main()
{
    cout << "Hello";
}