繁体   English   中英

在类头文件C ++中声明类对象

[英]Declaring class object inside a class header C++

我正在尝试在标头中声明一个类对象,但无法使其正常工作。 我目前有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中

Heltal.h包含在Array.h时,您便沿着正确的路径开始。

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

#ifndef HELTAL_H
#define HELTAL_H

class Heltal {
    ...
};

#endif

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

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

您确实需要在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,这也可以解决当前的问题,但是include保护更安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM