gpt4 book ai didi

c++ - ostream/ofstream 继承问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:18 24 4
gpt4 key购买 nike

我正在编写 C++ 程序,我需要一些帮助来理解错误。

默认情况下,我的程序会打印到终端 (STDOUT)。但是,如果用户提供文件名,程序将打印到该文件。如果我正在写入终端,我将使用 std::cout 对象,而如果我正在写入一个文件,我将创建并使用 std::ofstream 对象。

但是,我不想一直检查我是否应该写入终端或文件。由于 std::coutstd::ofstream 对象都继承自 std::ostream 类,我想我会创建一种接受 std::ostream 对象的 print_output 函数。在调用此函数之前,我会检查是否应该打印到文件中。如果是这样,我将创建 std::ofstream 对象并将其传递给打印函数。如果没有,我将简单地将 std::cout 传递给打印函数。这样打印函数就不必担心打印到哪里了。

我认为这是个好主意,但我无法编译代码。我在这里创建了一个过度简化的示例。这是代码...

#include <fstream>
#include <iostream>
#include <stdio.h>

void print_something(std::ostream outstream)
{
outstream << "All of the output is going here\n";
}

int main(int argc, char **argv)
{
if(argc > 1)
{
std::ofstream outfile(argv[1]);
print_something(outfile);
}
else
{
print_something(std::cout);
}
}

...这是编译时错误。

dhrasmus:Desktop standage$ g++ -Wall -O3 -o test test.c 
/usr/include/c++/4.2.1/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/include/c++/4.2.1/bits/ios_base.h:779: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/include/c++/4.2.1/iosfwd:55: error: within this context
/usr/include/c++/4.2.1/iosfwd: In copy constructor ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’:
/usr/include/c++/4.2.1/iosfwd:64: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here
test.c: In function ‘int main(int, char**)’:
test.c:15: note: synthesized method ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’ first required here
test.c:15: error: initializing argument 1 of ‘void print_something(std::ostream)’

关于我为什么会收到这些错误的任何想法?是我的代码有问题,还是我的方法存在根本性错误?

谢谢!

最佳答案

流不可复制,因此您不能按值将它们传递给函数。请改用引用。

void print_something(std::ostream& outstream);

关于c++ - ostream/ofstream 继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com