Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包含彼此的头文件_C++ - Fatal编程技术网

C++ 包含彼此的头文件

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

我有两个头文件。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 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++中的一个弱点)。很高兴在这里见到你:-)。