2

我试图在头文件中声明一个类对象,但我无法让它工作。我目前有 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;
};

数组.h

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

两个头文件都包含在 main.cpp 中

4

3 回答 3

3

Heltal.h当您包括在内时,您开始沿着正确的道路前进Array.h

包含保护添加到您的标题中,这将帮助您避免重复包含:

#ifndef HELTAL_H
#define HELTAL_H

class Heltal {
    ...
};

#endif

现在您可以安全地包含Heltal.h在顶部Array.h,您的问题将得到解决。

于 2012-11-30T14:42:12.957 回答
1

编译 ac/cpp 文件时,包含的文件将首先在 c/cpp 文件中展开。并且某些课程的顺序应该正确。例如,Heltal 必须在 Array 之前,因此您的包含顺序应确保这一点。

于 2012-11-30T14:44:45.860 回答
0

您确实需要在 array.h 中包含 heltal.h,但两个文件都需要包含保护:

#ifndef array_h_guard
#define array_h_guard

// contents of array.h go here

#endif // array_h_guard

heltal.h 也是如此。这将防止多重包含。

请注意,您可以只包含来自 array.h 的 heltal.h,这也解决了当前的问题,但包含防护更安全。

于 2012-11-30T14:42:23.830 回答