C++ 包含彼此的头文件
我有两个头文件。decimal.h和integer.h分别包含各自的类。 我想写这样的东西C++ 包含彼此的头文件,c++,C++,我有两个头文件。decimal.h和integer.h分别包含各自的类。 我想写这样的东西 //integer.h #ifndef INTEGER_H #define INTEGER_H #include "decimal.h" class Integer { ... operator Decimal(); } #endif //decimal.h #ifndef DECIMAL_H #define DECIMAL_H #include "integer.h" class
//integer.h
#ifndef INTEGER_H
#define INTEGER_H
#include "decimal.h"
class Integer
{
...
operator Decimal();
}
#endif
//decimal.h
#ifndef DECIMAL_H
#define DECIMAL_H
#include "integer.h"
class Decimal
{
...
operator Integer();
}
#endif
给我带来麻烦的是,由于它们都包含了每一个,所以它在VisualStudio中的行为异常,并生成奇怪的编译器错误。有什么办法解决这个问题吗?也许你只需要一份远期声明
// In Integer.h
class Decimal;
class Integer
{
...
operator Decimal();
};
(顺便说一句,您的代码中缺少了最后一个分号。)也许您只需要一个转发声明
// In Integer.h
class Decimal;
class Integer
{
...
operator Decimal();
};
(顺便说一句,您的代码中遗漏了最后一个分号。)这样做从来都不是一个好的设计。试着将它们隔离。你应该在你的问题中添加准确的错误消息,因为Visual Studio中的许多事情可能被认为是“奇怪的”…@badgerr-不管你的主观判断如何,这里的问题是清楚的,这种错误产生的错误消息通常是“奇怪的”,即使是你最喜欢的编译器,这也不是一个好的设计。尝试隔离它们。你应该在问题中添加准确的错误消息,因为Visual Studio中的许多事情可能被认为是“奇怪的”…@badgerr-不管你的主观判断如何,这里的问题是清楚的,这种错误产生的错误消息通常是“奇怪的”,即使使用你最喜欢的编译器也是如此。Oops。我已经习惯了java,我没有从编辑器中复制和粘贴。同样,为了使这一点起作用,两者需要在同一标题中,对吗?是的。显示的代码应该是整数.h。在Decimal.h.Re中执行相同的操作:“在Decimal.h中执行相同的操作”-这是一个很好的建议,但请注意,从技术上讲,这并不是解决问题所必需的;
Decimal.h
的原始版本可以正常工作,只要Integer
不试图包含它。@PeteBecker:你完全正确。我只是希望尽可能减少依赖性(可能是C/C++中的一个弱点)。很高兴在这里见到你:-)。哦。我已经习惯了java,我没有从编辑器中复制和粘贴。同样,为了使这一点起作用,两者需要在同一标题中,对吗?是的。显示的代码应该是整数.h。在Decimal.h.Re中执行相同的操作:“在Decimal.h中执行相同的操作”-这是一个很好的建议,但请注意,从技术上讲,这并不是解决问题所必需的;Decimal.h
的原始版本可以正常工作,只要Integer
不试图包含它。@PeteBecker:你完全正确。我只是希望尽可能减少依赖性(可能是C/C++中的一个弱点)。很高兴在这里见到你:-)。