将全局变量定义为哈希 我有许多C++类,其中很多(不是全部)共享两个“静态大小变量”,例如

将全局变量定义为哈希 我有许多C++类,其中很多(不是全部)共享两个“静态大小变量”,例如,c++,C++,分享 /*Other variables in this header used by all classes*/ static size width=10;//Used by about 60% static size height = 12;//used by about 60% 因此,我将它们与所有类共享的其他对象一起放在头文件中 当我编译这个项目时,我收到了很多警告(来自没有使用这些警告的类),它们抱怨这些警告被定义而没有被使用。但是我需要他们在那里 所以我问,有没有一种方法来散列

分享

/*Other variables in this header used by all classes*/

static size width=10;//Used by about 60%

static size height = 12;//used by about 60%
因此,我将它们与所有类共享的其他对象一起放在头文件中

当我编译这个项目时,我收到了很多警告(来自没有使用这些警告的类),它们抱怨这些警告被定义而没有被使用。但是我需要他们在那里

所以我问,有没有一种方法来散列这些信息以防止此类警告

对它们进行散列,以便可以定义它们!防止类调用此头文件时发出警告,这些头文件不需要最后两个变量,但它们调用头文件是因为它们需要init的所有其他内容 编辑阅读tune2fs的答案,我意识到我可能对问题的解释是错误的

也许您忘记在头文件中使用
extern
?如果只在头文件中包含
静态定义
所有编译单元都将具有唯一副本,而不是共享副本。另见

编辑在评论中消除歧义


这种方法的设计是为了产生最小的影响(不调用任何实际代码;
take\u address
实际上不会初始化,除非调用未使用的\u vars\u helper)

这对你的案子应该很有效。您可以将
未使用的\u vars\u helper()
设置为静态和/或将其移动到匿名名称空间中,以防止helper的外部可见性。

编辑阅读tune2fs的答案,我意识到我可能对问题的解释是错误的

也许您忘记在头文件中使用
extern
?如果只在头文件中包含
静态定义
所有编译单元都将具有唯一副本,而不是共享副本。另见

编辑在评论中消除歧义


这种方法的设计是为了产生最小的影响(不调用任何实际代码;
take\u address
实际上不会初始化,除非调用未使用的\u vars\u helper)


这对你的案子应该很有效。您可以将
未使用的\u vars\u helper()
设置为静态和/或将其移动到匿名命名空间中,以防止帮助器的外部可见性。

您应该将它们放置在单个头文件中。因此,您只能将其包含在他们需要的类中。这避免了其他类中的警告。因此,最终您将有两个头文件。一个是包含所有类的内容,另一个是定义所有类中未使用的变量


但是,请尽量避免使用全局变量。

您应该将它们放在单个头文件中。因此,您只能将其包含在他们需要的类中。这避免了其他类中的警告。因此,最终您将有两个头文件。一个是包含所有类的内容,另一个是定义所有类中未使用的变量



但是,尽量避免使用全局变量。

显示一些代码,当然还有警告。1)如果从未使用过它们,为什么需要它们?2) 散列和它有什么关系?我想我会遵循这个,直到你谈论散列。。。什么?@Bjorn-I声明(大多数类确实使用它们,有些不使用)您描述的情况是模糊的,但是使用外部静态描述变量是一种代码味道。您最好在类中使用
.Width()
.Height()
内联静态函数,并让它们引用您需要的任何内容。这将允许您在必要时可靠地更改特定类的值。显示一些代码,当然还有警告。1)如果从未使用过它们,为什么需要它们?2) 散列和它有什么关系?我想我会遵循这个,直到你谈论散列。。。什么?@Bjorn-I声明(大多数类确实使用它们,有些不使用)您描述的情况是模糊的,但是使用外部静态描述变量是一种代码味道。您最好在类中使用
.Width()
.Height()
内联静态函数,并让它们引用您需要的任何内容。这将允许您在必要时可靠地更改特定类的值。我可以理解您的意思,但我觉得这两个简单值的单独标题非常有用?浪费?我不这么认为。因为它更清楚地说明了你在哪里包括了什么。在所有类中包含变量要糟糕得多,因为它们或多或少都是全局变量,因此绝对应该避免。我完全同意尝试不使用全局变量,但在这种情况下,除了将这两行代码添加到大约60%的类中之外,我看不到任何其他选项,这似乎更加错误:(你的权利更糟糕,因此将它们放在自己的头文件中,并将其包含在需要它们的60%的类中。因此,最终它只是一个60%的全局变量,而不是100%:pI可以理解你的意思,但我觉得这两个简单值的单个头是非常无用的?浪费的?我不这么认为。因为更清楚地说明您在何处包含了什么。在所有类中包含变量要糟糕得多,因为它们或多或少都是全局变量,因此绝对应该避免。我完全同意尝试不使用全局变量,但在这种情况下,除了将这两行代码添加到大约60%的类中之外,我看不到任何其他选项,这似乎是错误的更错误的是:(你的权利更糟糕,因此将它们放在自己的头文件中,并将其包含在需要它们的60%的类中。因此,最终它只是一个60%的全局变量,而不是100%:p他们需要它们在自己的进程中是唯一的,因此尊重静态make@Perl_noob:好的,比我原来的方法(
unused\u vars\u helper
)对于您的使用是正确的。他们需要它们对于自己的流程是唯一的,因此尊重静态make@Perl_noob:好的,我原来的方法(
unused\u vars\u helper
)适合您使用
 static SomeClass NotUnusedInstance;


 static void unused_vars_helper()
 {
      static SomeClass* take_address = &NotUnusedInstance;
 }