如何正确引用两个对象(双重链接的子对象和父对象)中的子对象和父对象?执行此操作时,会出现编译错误:**** 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/