[英]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.