在类标头C ++中声明类对象

时间:2012-11-30 14:38:43

标签: c++ class object declare

我正在尝试在标题中声明一个类对象,但我无法让它工作。我目前有2个头文件和2个cpp文件,用于定义每个函数的功能。这些类称为Heltal和Array,它们都在自己的头文件(heltal.h和array.h)中。

我正在尝试在Array类的私有部分内声明Heltal类对象,但无论我做什么,我都找不到声明它的方法。我已经尝试将heltal.h头文件包含在array.h头文件中,但随后开始抱怨重新定义。

然后在array.cpp中声明它可以正常工作,但我想在头文件中定义它。

以下是文件目前的样子:

heltal.h

class Heltal {
    public:
        Heltal();
        Heltal(int tal);
        ~Heltal();

        void set(int tal);
        bool operator < (const Heltal &heltal) const
        {
            return (heltal < heltal.heltal);
        }
        bool operator > (const Heltal &heltal) const
        {
            return (heltal > heltal.heltal);
        }
    private:
        int heltal;
};

array.h

#include <vector>
class Array {
public:
    Array();
    Array(int in);
    ~Array();
    int Random(int min, int max);
private:
    Heltal h;
    int size;
};

两个标题都包含在main.cpp

3 个答案:

答案 0 :(得分:3)

当您在Heltal.h内加入Array.h时,您就沿着正确的道路开始了。

include guards添加到标题中,这有助于避免重复包含:

#ifndef HELTAL_H
#define HELTAL_H

class Heltal {
    ...
};

#endif

现在,您可以安全地在Heltal.h的顶部加入Array.h,您的问题就会得到解决。

答案 1 :(得分:1)

编译c / cpp文件时,首先会在c / cpp文件中展开包含的文件。 有些班级应该是正确的。 例如 Heltal必须在Array之前,所以你的包含顺序应该确保这一点。

答案 2 :(得分:0)

你需要在array.h中包含heltal.h,但这两个文件都需要包含guards:

#ifndef array_h_guard
#define array_h_guard

// contents of array.h go here

#endif // array_h_guard

和heltal.h类似。这将阻止多重包含。

请注意,您可以简单地只包含来自array.h的heltal.h,这也解决了直接问题,但包含警卫更安全。