C ++ Object引用为对象的成员变量

时间:2012-01-04 16:22:39

标签: c++ object include header-files member-variables

我是C ++的新手,我遇到了设置主体系结构的问题。我学会了如何在C#中使用这个特定的体系结构,但我无法在C ++中使用它。 我的问题如下:我有2个对象。我希望这些对象彼此“了解”,所以我希望将这两个对象作为成员变量引用。

考虑一下:

//main.cpp:
#include "Object1.h"
#include "Object2.h"

Object1 *obj1;
Object2 *obj2;

...

obj1 = new Object1(obj2);
obj2 = new Object2(obj1);

...


//Object1.h

#ifndef OBJECT1_H
#define OBJECT1_H

#include "Object2.h"

class Object1 {
    public:
    Object1(Object2*);

    Object2 *obj;
}

#endif


//Object2.h

#ifndef OBJECT2_H
#define OBJECT2_H

#include "Object1.h"

class Object2 {
    public:
    Object2(Object1*);

    Object1 *obj;
}

#endif
然而,这是不可能的。因为如果没有ifndef的东西你就会有这种无休止的迭代,包括每个人的.h文件。但是对于ifndef,其中一个对象没有包含其他类定义,也不知道它应该创建什么对象。 整个问题不会出现在C#中,因为您不必包含.h文件。你甚至没有.h文件:P。当你创建一个新类时,每个其他类都知道这个类的存在。但是在C ++中,你必须先包含特定类的.h才能生成这个类的对象(或者甚至是引用)。

所以,我的问题是。如何将彼此引用的2个对象作为自己的成员变量?

感谢您的关注!

干杯,

Maxim Schoemaker

4 个答案:

答案 0 :(得分:5)

您使用预先声明,只是:

class Object1;     // Pre-declare this class, so we can have pointers to it

Object1 *object1;  // Works fine, without having the full declaration of Object1.

答案 1 :(得分:1)

为了处理您所描述的情况,在c ++中,有一个名为 - 前向声明。

一些有用的链接:

http://en.wikipedia.org/wiki/Forward_declaration

http://www-subatech.in2p3.fr/~photons/subatech/soft/carnac/CPP-INC-1.shtml

答案 2 :(得分:0)

您不需要头文件中的#include。例如,在Object1.h中,您只需添加class Object2;即可。这有很多优点。尽量避免在头文件中使用#include,除非它们在没有它们的情况下不进行编译。

你可以做一些时髦的事情,比如

class X;

X returnX();
void processX(X x);
    -

答案 3 :(得分:0)

如果您只使用指向Objects1的指针,则不需要在Object2.hpp中包含Object1.hpp。但是你需要在Object2.cpp中包含Object1.hpp,因为它需要具有Object1

的实际实现