错误:'logFileObj'没有命名类型

时间:2013-06-03 12:31:15

标签: c++ compilation compiler-errors g++

我有一个名为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

任何帮助表示感谢。

1 个答案:

答案 0 :(得分: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);