Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 前向声明类的实例_C++_Forward Declaration - Fatal编程技术网

C++ 前向声明类的实例

C++ 前向声明类的实例,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*>

这是下面的问题:。 如果在父项的标头中声明了forward,则为子项

它不包括在内,所以编者不会找到孩子?那么我如何从父对象实例化一个新的子对象呢

Parent.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.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()->。。。