0

我有一个名为的文件global.h,其内容是:

#define DEPTH 10
#define LOGGING     //to log the progress of the program.
#ifdef LOGGING
#include <fstream>
#include <string>
extern std::string logFileName;
extern std::ofstream logFileObj;
#endif

还有main.cpp

#include "global.h"

using namespace std;

#ifdef LOGGING
string logFileName = ".log";
ofstream logFileObj;
logFileObj.open(logFile);    //line 13
logFileObj<<"depth: "<<DEPTH<<endl;    //line 14
#endif

我在编译中不断收到以下错误:

src/main.cpp:13:1: error: ‘logFileObj’ does not name a type
src/main.cpp:14:1: error: ‘logFileObj’ does not name a type

任何帮助表示赞赏。

4

1 回答 1

1

C++ 不允许函数外的操作。C++ 允许您全局定义变量,但您需要将操作放在函数中。

如果我正确阅读了您的问题,您只需要一个函数并在需要时调用它:

#include <fstream>
#include <utility>
#include <string>

template<typename T>
void WriteLog(const std::string& log_file_name, const std::string& prefix, const T& data)
{
  std::ofstream log_file_handler(log_file_name.c_str(), std::ios::app);  // if you use C++11, you could use string directly
   log_file_handler << prefix << data << std::endl;
}

用法:

WriteLog<int>("app.log", "depth:", DEPTH);
于 2013-06-03T12:53:18.420 回答