C++ 前向声明类的实例
这是下面的问题:。 如果在父项的标头中声明了forward,则为子项 它不包括在内,所以编者不会找到孩子?那么我如何从父对象实例化一个新的子对象呢 Parent.hC++ 前向声明类的实例,c++,forward-declaration,C++,Forward Declaration,这是下面的问题:。 如果在父项的标头中声明了forward,则为子项 它不包括在内,所以编者不会找到孩子?那么我如何从父对象实例化一个新的子对象呢 Parent.h #pragma once #include <vector> using std::vector; class Child; class Parent { public: Parent(); void GiveBirth(); ~Parent(); vector<Child*>
#pragma once
#include <vector>
using std::vector;
class Child;
class Parent
{
public:
Parent();
void GiveBirth();
~Parent();
vector<Child*> children;
};
#pragma once
#include "Parent.h"
class Child : Parent
{
public:
Child();
~Child();
};
Child.h
#pragma once
#include <vector>
using std::vector;
class Child;
class Parent
{
public:
Parent();
void GiveBirth();
~Parent();
vector<Child*> children;
};
#pragma once
#include "Parent.h"
class Child : Parent
{
public:
Child();
~Child();
};
Child.cpp
#include "stdafx.h"
#include "Parent.h"
Parent::Parent()
{
}
void Parent::GiveBirth()
{
Child ch = Child(); //Error: incomplete type is not allowed
}
Parent::~Parent()
{
}
#include "stdafx.h"
#include "Child.h"
Child::Child()
{
}
Child::~Child()
{
}
#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()
{
}
这里有一些阅读清单给你 Parent.cpp
#include "stdafx.h"
#include "Parent.h"
Parent::Parent()
{
}
void Parent::GiveBirth()
{
Child ch = Child(); //Error: incomplete type is not allowed
}
Parent::~Parent()
{
}
#include "stdafx.h"
#include "Child.h"
Child::Child()
{
}
Child::~Child()
{
}
#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()
{
}
你的问题不清楚,但我认为答案是
Parent.cpp
应该#包括“Child.h”
。使用new
并不意味着不需要在那里完全定义Child
。添加使用new
的解释可能会有提示。如果我尝试从构造函数调用GiveBirth,程序将冻结。它肯定会导致无限循环。Parent::Parent()->Parent::GiveBirth()->Child::Child()->Parent::Parent()->。。。