我正在尝试在标题中声明一个类对象,但我无法让它工作。我目前有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
中答案 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,这也解决了直接问题,但包含警卫更安全。