【问题标题】:How to use non-const global variable that defined in a namespace如何使用在命名空间中定义的非常量全局变量
【发布时间】:2023-01-18 21:06:23
【问题描述】:

我有一个头文件,其中放置了一些全局常量变量。现在我需要另一个项目范围的可修改变量。但它会按预期给出链接器错误。我试图在不使用的情况下解决问题排队关键词。我的代码:

常量.h:

#ifndef CONSTANTS_H
#define CONSTANTS_H

namespace constants {
    bool myVar;
}

#endif // CONSTANTS_H

我在我的课程中使用这个变量 constants::myVar。我得到了一个链接器错误。任何不使用内联的解决方案(为了向后编译器兼容性)?

【问题讨论】:

  • 您遇到的链接器错误是什么?
  • 如果在 constants.h 文件中的“常量”命名空间中有一个非常量变量,那么您就会感到困惑...
  • 您是否研究过其他选择?全局变量可能会大大损害您的长期可维护性。对于没有单元测试的小项目来说不是那么重要,但是了解全局变量的替代方案是一件好事
  • 您不应该将全局变量定义放在头文件中。相反,在标头中声明 void setMyVar(bool var)bool getMyVar() 并在源文件中定义这些函数。
  • @wohlstad 哇,它解决了这个问题。 Joris Timmermans 我笑了 :) 但我能说你是对的。

标签: c++ extern


【解决方案1】:

我同意上面关于寻找此设计的替代方案的 cmets。

话虽如此,如果您必须保留当前设计,您可以执行以下操作:

  1. 将头文件更改为宣布myVar 作为外部人员:
    namespace constants {
    //--vvvvvv------------
        extern bool myVar;
    }
    
    1. 添加 constants.cpp 文件(如果它还不存在),带有定义对于myVar(最好进行一些初始化):
    namespace constants {
        bool myVar;
        // or better: something like:
        bool myVar = false;
    }
    

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2016-02-25
    • 2014-02-17
    • 2011-03-25
    • 1970-01-01
    • 2011-08-31
    • 2017-01-04
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多