C++ 祖父母、父母、子女-参考问题

C++ 祖父母、父母、子女-参考问题,c++,class,object,reference,C++,Class,Object,Reference,我有一个孩子、父母和祖父母的班级。 一个祖父母有几个父母,存储在一个向量中,每个父母有几个孩子,也存储在一个向量中。每个对象都拥有对其所有者的引用 在MAIN中,我将祖父母和父母的ID变量分别设置为1,但是当我访问孩子父母的ID时,它是空的。然而,当我接触到孩子的父母时,祖父母的期望值是1 为什么孩子的父母id不是1 #ifndef HEADERH_H #define HEADER_H #include <vector> class CHILD; class PARENT; cl

我有一个孩子、父母和祖父母的班级。 一个祖父母有几个父母,存储在一个向量中,每个父母有几个孩子,也存储在一个向量中。每个对象都拥有对其所有者的引用

在MAIN中,我将祖父母和父母的ID变量分别设置为1,但是当我访问孩子父母的ID时,它是空的。然而,当我接触到孩子的父母时,祖父母的期望值是1

为什么孩子的父母id不是1

#ifndef HEADERH_H
#define HEADER_H

#include <vector>

class CHILD;
class PARENT;
class GRANDPARENT;

class CHILD{
public:
    int id;
    const PARENT &parent;
    CHILD(PARENT &parent):parent(parent){};};
class PARENT{
public:
    int id;
    const GRANDPARENT &grandparent;
    std::vector<CHILD> children;

    PARENT(GRANDPARENT &grandparent):grandparent(grandparent){};};
class GRANDPARENT
{
public:
    int id;
    std::vector<PARENT> parents;
    GRANDPARENT(){};
};

#endif
\ifndef HEADERH\H
#定义标题
#包括
班级儿童;
班级家长;
班级祖父母;
班童{
公众:
int-id;
const家长&家长;
子(父&父):父(父){};};
班级家长{
公众:
int-id;
康斯特祖父母和祖父母;
性病媒儿童;
父母(祖父母和祖父母):祖父母(祖父母){};};
班级祖父母
{
公众:
int-id;
病媒父母;
祖父母{};
};
#恩迪夫
源文件

#include "Headerh.h"
#include <iostream>

int main(){

GRANDPARENT grandparent;

for(int i=0; i<=5; i++){
    PARENT parent(grandparent);

    for(int i=0; i<=5; i++){
        CHILD child(parent);
        parent.children.push_back(child);
    }
    grandparent.parents.push_back(parent);
}

grandparent.id = 1;
grandparent.parents[1].id = 1;

int test(grandparent.parents[1].children[1].parent.id);
int test0(grandparent.parents[1].children[1].parent.grandparent.id);

std::cout<<test<<" "<< test0<<std::endl;


return 0;
};
#包括“Headerh.h”
#包括
int main(){
祖父母祖父母;

对于(int i=0;请注意,您不应使用大写字母编写类、变量、函数等名称。大写字母只应用于宏。可能的副本也请参见。是的,您是对的,复制时引用将丢失。为了便于将来参考,可在执行所有回推操作后,通过向所有者对象分配指针来解决此问题ed.也就是说,需要循环遍历向量并在其后分配指针作为注释,您不应使用大写字母编写类、变量、函数等名称。大写字母只应用于宏。可能的重复项也请参见。是的,您是对的,复制时会丢失引用。为了便于将来参考,可通过分配一个po来解决此问题在所有的push_-back操作完成后,inter将返回到所有者对象。也就是说,需要循环遍历向量,然后分配指针