代码之家  ›  专栏  ›  技术社区  ›  juztcode

在C++中使用静态变量作为日志转换开关

  •  0
  • juztcode  · 技术社区  · 5 年前

    这是 main.cpp 有很多 Log 起皱的地方:

    #include "utils.hpp"
    ...//some code  
    int main(){
     int a = 0;
     int b = 0;
     util::LogClass::Log("Initial","something);  
    
     //some more code 
     util::LogClass::Log("Mid","something");  
    
     //some more code  
     util::LogClass::Log("Middle","something");  
    }
    

    LogClass的定义如下 utils.hpp :

    namespace util{
     class LogClass{
         public:static bool LOG_ENABLED;
         public: static void Log(std::string tag, std::string message){
          if(LOG_ENABLED){
          std::cerr << tag+": "+message <<std::endl;}
        }
      }
      bool LogClass::LOG_ENABLED=true;
    }
    

    主.cpp :

    #include "utils.cpp"  
    util::LogClass::LOG_ENABLE=false;
    int main(){ //the previous main function}  
    

    *上面的代码实际上给出了一个错误说明: 重新定义bool util::LogClass::logu ENABLED bool util::LogClass::LOG_ENABLE=false *

    #include "utils.cpp"  
    
    int main(){ util::LogClass::LOG_ENABLED=false; //the previous main function}    
    

    然后代码编译得很好。所以我的问题是为什么我不能在 main() 函数,即使它是静态成员,为什么( g++ )编译器把它当作一个重新定义?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Henning Koehler    5 年前

    只能在定义变量时对其进行静态初始化。主函数内部的初始化是动态的,所以没关系。