Там есть 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;
}
Я был думая, что я смогу сделать это в main.cpp
:
#include "utils.cpp"
util::LogClass::LOG_ENABLE=false;
int main(){ //the previous main function}
*, приведенный выше код фактически выдает ошибку: переопределение 'bool util :: LogClass :: LOG_ENABLED' bool util: : LogClass :: LOG_ENABLE = false *
, но если я переместу его внутрь основного:
#include "utils.cpp"
int main(){ util::LogClass::LOG_ENABLED=false; //the previous main function}
, тогда код компилируется нормально. Поэтому у меня возникает вопрос: почему я не могу включить его вне функции main()
, даже если он является элементом stati c, и почему компилятор (g++
) принимает его как переопределение?