请帮助弄清楚此代码的错误。
main.cpp 创建 Object3D ,创建 Box 并将Object3D *指针传递给Box。
在我从Box中删除Object3D声明之前有错误。
的main.cpp
#include <iostream>
#include "stdafx.h"
#include "Object3D.h"
int _tmain(int argc, _TCHAR* argv[])
{
Object3D obj;
char c;
std::cin >> c;
return 0;
}
Object3D.cpp
#include "Object3D.h"
#include "Box.h"
Object3D::Object3D()
{}
Object3D::~Object3D()
{}
Object3D.h
#ifndef OBJECT3D_H
#define OBJECT3D_H
#include "Box.h"
class Object3D
{
public:
Object3D();
~Object3D();
private:
Box _box_obj; //<<<---ERROR HERE (C2146, C4430)
};
#endif
Box.cpp
#include "Box.h"
#include "Object3D.h"
int Box::Init(Object3D* _obj)
{
obj = _obj;
}
Box::Box()
{}
Box::~Box()
{}
Box.h
#ifndef BOX_H
#define BOX_H
#include "Object3D.h"
class Box
{
public:
Object3D* obj; //<<<---ERROR HERE (C2143, C4430)
int Init(Object3D* _obj); //<<<---ERROR HERE (C2061)
Box();
~Box();
};
#endif
答案 0 :(得分:0)
更改Box.h:
#ifndef BOX_H
#define BOX_H
// forward reference possible since the class is not dereferenced here.
class Object3D;
class Box
{
public:
Object3D* obj;
int Init(Object3D* _obj);
Box();
~Box();
};
#endif
类定义不使用Object3D
的任何成员。因此,您不需要知道Object3D
的定义,而只需知道它是一个类。前向引用就足够了,也是解决循环依赖的适当工具。
BTW:对象的循环引用通常包括一些拥有其他对象的“主”对象。更改成员名称以显示关系而不是类型是有意义的。我建议
Object3D* owner;
当盒子拥有对象时