如何正确修复对全局变量的循环依赖关系



我已经搜索了一些关于循环依赖关系的内容,但在全局变量方面还没有找到答案。以下是发生的事情,名称稍微简化了一点:

  • 我的全局变量文件(globals.h)具有#include A.h
  • A.h具有#include B.h
  • B.h具有对全局const int Foo的引用,该引用在globals.h中声明

这给了我一个错误,即未在作用域中声明const int Foo。如果我理解正确的话,这是因为#include A.h是在定义extern const int Foo之前运行的。

解决这个问题的最佳方法是什么?如果我把extern const int Foo放在B.h中的类声明之前,这就修复了它,但这不是错误的使用extern的方式吗,因为它已经用于globals.h中的那个变量了?有更好的方法吗?

我想,如果有更好的类设计,这可能根本不是问题,但目前,这些依赖关系是无法避免的。。。只是寻求一些建议。非常感谢!!

附言:从这篇文章中可以明显看出,我不是C++专家(我的C++经验都与爱好有关),我很乐意听到任何相关的建议,以避免将来出现这种问题。

如果Foo是一个静态常量int,我会重构你的.h文件,这样你就可以在一个公共的地方获得静态常量。注意不要两次定义同一个变量。

否则,让头声明它是外部的,并将定义放在适当的.cpp文件中就可以了。

最新更新