Forward声明类的实例
Instance of Forward declared Class
这是后续问题:错误C2504循环包含。如果在父级的标头中正向声明,则为子级。
它不包括在内,所以编译器找不到Child?然后如何从Parent对象实例化一个新的Child对象。
Parent.h
#pragma once
#include <vector>
using std::vector;
class Child;
class Parent
{
public:
Parent();
void GiveBirth();
~Parent();
vector<Child*> children;
};
Parent.cpp
#include "stdafx.h"
#include "Parent.h"
Parent::Parent()
{
}
void Parent::GiveBirth()
{
Child ch = Child(); //Error: incomplete type is not allowed
}
Parent::~Parent()
{
}
Child.h
#pragma once
#include "Parent.h"
class Child : Parent
{
public:
Child();
~Child();
};
Child.cpp
#include "stdafx.h"
#include "Child.h"
Child::Child()
{
}
Child::~Child()
{
}
以下是一些阅读清单。
http://en.wikipedia.org/wiki/Opaque_pointer
http://en.wikibooks.org/wiki/C%2B%2B_Programming/Idioms#Pointer_To_Implementation_.28pImpl.29
Parent.cpp
#include "stdafx.h"
#include "Parent.h"
#include "Child.h"
Parent::Parent()
{
}
void Parent::GiveBirth()
{
//Child ch = Child(); //Error: incomplete type is not allowed
children.push_back(new Child());
}
Parent::~Parent()
{
}
相关文章:
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 如何使用参数声明实例?
- 模板中的模板方法 - 实例声明和类方法声明签名不同
- 单行类声明和实例化
- 从模板基类派生是否在派生类声明的点实例化模板
- 在实例化封闭类模板之后,我们可以声明模板类成员的部分专用化吗
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 在声明或实现中延迟初始化C++单一实例
- 在 C++ 结构内声明的数组 A[1] 创建多个实例
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?
- 声明类的变量而不创建它的实例
- C++17 单独的显式方法模板实例化声明和定义
- 如何将指针存储在实例变量中,该指针被声明为指向基类的指针
- 声明嵌套基模板类实例是派生类的好友
- 析构函数在 lambda 捕获说明符中声明的类实例上运行两次
- 声明基类类型的指针,但随后通过指向子类来实例化它.这是良好的编程实践吗?
- 在声明纯虚函数的父类的实例上调用纯虚函数时会发生什么情况
- 模板函数是否以内联方式声明 constexpr,即使实例化不是 constexpr
- C++类实例声明没有匹配的函数
- C 在对象实例化时如何分开声明和构造函数