Forward声明类的实例

Instance of Forward declared Class

本文关键字:实例 声明 Forward      更新时间:2023-10-16

这是后续问题:错误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()
{
}