Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何临时使用std::cout代替std::of Stream_C++ - Fatal编程技术网

C++ 如何临时使用std::cout代替std::of Stream

C++ 如何临时使用std::cout代替std::of Stream,c++,C++,如果我想创建一个日志类,比如 class logging_class { public: std::ofstream error; std::ofstream event; logging_class() {} logging_class(string err, string evt) { error.open(err); event.open(evt); } ~logging_class() { e

如果我想创建一个日志类,比如

class logging_class {
public:
    std::ofstream error;
    std::ofstream event;
    logging_class() {}
    logging_class(string err, string evt) {
        error.open(err);
        event.open(evt);
    }
    ~logging_class() {
        error.close();
        event.close();
    }
};
以便以后我可以轻松创建程序日志:

logging_class logger("Log_Error.txt","Log_Event.txt");
logger.error << "something wrong";
logger.event << "something interesting";
在使用默认构造函数创建对象之后:
logging\u类记录器

我现在可以将所有日志重定向到屏幕显示。

想想它实际上是什么:一个对象

全局对象
std::cout
std::wcout
控制输出到[…]

所以,当你说你想暂时用
std::cout
代替
std::ofstream
时,你是在把苹果(object
std::cout
)和橙子(class
std::ofstream
)混在一起

相反,您要做的是使用
std::cout
而不是类
std::ofstream
的对象

但是
std::cout
不属于类,因此
error
无法容纳它;它属于类,是前者的超类


因此,正如注释中所建议的,您可以对该类的对象,
std::ofstream
std::ostream&
进行
error
/
event
引用,并用
std::ofstream
std::ofstream{“filename.txt}初始化它们
通过
日志记录类的适当构造函数

ostream&error
并用所需流初始化它。是一种使用指针的方法,这样您就可以在流之间进行更改—这样您就可以将其设置为cout,直到程序读取其配置文件以找出日志记录应该放在哪里。您可以使用ostream引用,但是在构建logger类时,您需要知道它要去哪里。或者,您可以创建一个ostream并更改rdbuf,使其指向不同的位置:
class logging_class {
public:
    //std::ofstream error;
    //std::ofstream event;
    std::ostream& error;
    std::ostream& event;
    logging_class():error(std::cout),event(std::cout) {}
    //logging_class(string err, string evt) {
    //    error.open(err);
    //    event.open(evt);
    //}
    //~logging_class() {
    //    error.close();
    //    event.close();
    //}
};