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

时间:2014-01-13 09:24:00

标签: c++ class pointers derived

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

//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。 正如我所说,我已经找到了HOURS。并没有找到任何方法来解决错误: 错误C2512:'DerivedClass':没有合适的默认构造函数

3 个答案:

答案 0 :(得分:1)

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

Baseclass *MyClass = new DerivedClass;

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

在实施derived课程后或在main

中移动它

答案 1 :(得分:0)

Baseclass *MyClass = new DerivedClass;

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

P.S。你在代码中的评论(关于提供对iostream的访问)是正确的。但是考虑一下这不是好习惯。头文件应该编译,不需要包含不同的内容。

在.h中实例化MyClass对象也不是一件好事。

答案 2 :(得分:0)

你的节目完全无效。

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

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";
}