【问题标题】:Header Files Including each other [duplicate]包含彼此的头文件[重复]
【发布时间】:2013-12-23 20:56:44
【问题描述】:

我有两个头文件。 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

给我带来麻烦的是,由于它们包含了每个,它在 Visual Studio 中的行为很奇怪,并且会产生奇怪的编译器错误。有没有办法解决这个问题?

【问题讨论】:

  • 从来没有一个好的设计可以做到这一点。尝试隔离它们。
  • 您应该在问题中添加确切的错误消息,因为 Visual Studio 中的许多内容都可能被视为“奇怪”...
  • @badgerr - 不管你的主观判断如何,这里的问题是清楚的,这种错误产生的错误信息往往是“奇怪的”,即使是你最喜欢的编译器。

标签: c++


【解决方案1】:

也许您只想要一个前向声明?

// In Integer.h
class Decimal;
class Integer
{
     ...
     operator Decimal();
};

(顺便说一句,您错过了代码中的最后一个分号。)

【讨论】:

  • 糟糕。我习惯了java,我没有从编辑器复制和粘贴。也为此工作需要两者都在同一个标​​题中吗?
  • 是的。显示的代码应该在 Integer.h 中。在 Decimal.h 中执行相同操作。
  • Re:“在 Decimal.h 中做同样的事情” - 好建议,但请注意,这在技术上不是解决问题所必需的; Decimal.h 的原始版本可以正常工作,只要 Integer 不尝试 #include 它。
  • @PeteBecker:你是绝对正确的。我只是想尽可能减少依赖(可能是 C/C++ 的一个弱点)。很高兴在这里见到你:-)。
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2013-04-10
  • 2016-09-16
  • 2018-10-27
  • 1970-01-01
相关资源
最近更新 更多