我有一个名为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
任何帮助表示感谢。
答案 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);