如何正确引用两个对象(双重链接的子对象和父对象)中的子对象和父对象?执行此操作时,会出现编译错误:**** does not name a type。我怀疑这与由于define标记而省略的include语句有关。因此,应该如何包含这些标记?
三个文件(Parent.h、Child.h、main.cpp)是这样写的:

    /* Parent.h */
#pragma once
#ifndef _CHILD_CLS
#define _CHILD_CLS

#include "Child.h"

class Parent {
public:
    Parent() {}
    ~Parent() {}
    void do_parent(Child* arg);
};
#endif

/* Child.h */
#pragma once
#ifndef _CHILD_CLS
#define _CHILD_CLS

#include "Parent.h"

class Child {
public:
    Child() {}
    ~Child() {}
    void do_child(Parent* arg);
};
#endif

/* main.cpp */
#include "child.h"
#include "parent.h"

int main()
{
    Child   a();
    Parent  b();
    a.do_parent(Child& arg);
    return 0;
}

最佳答案

您定义了两个函数而不是对象,请参见most vexing parse
更新

Child   a();              // a is a function returns Child object
Parent  b();              // b is a function returns Parent object
a.do_parent(Child& arg);


Child   a;           // a is a Child object
Parent  b;           // b is a Parent object
b.do_parent(&a);

另外,您还有circular include问题,要打破循环包含,您需要转发一种类型:
儿童.h
#pragma once
#ifndef _CHILD_CLS
#define _CHILD_CLS

//#include "Parent.h"  Don't include Parent.h
class Parent;           // forward declaration
class Child {
public:
    Child() {}
    ~Child() {}
    void do_child(Parent* arg);
};
#endif

子.cpp
#include "Parent.h"
// blah

关于c++ - 如何在两个类中双重引用子类和父类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14808750/

10-09 12:42