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