微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类中的 std::ostream 对象“无法通过指针或对象访问”

如何解决类中的 std::ostream 对象“无法通过指针或对象访问”

我在一个类中使用了几个函数,这些函数通过函数接口传递了一个 ostream,然后可以用来输出错误消息。我曾希望能够将所有 ostream 绑定到一个对象,然后在必要时重定向一个文件

我的代码的相关部分如下所示:

#include <iostream>

class Example
{
    public:
    Example(){} //<--Error: "std::basic_ostream<_CharT,_Traits>::basic_ostream() [with _CharT=char,_Traits=std::char_traits<char>]" (declared at line 390 of "/usr/include/c++/9/ostream") is inaccessible C/C++(330)

    void DoSomething()
    {
        FunctionWithOstream(out);
    }

    private:
    std::ostream out; //in my case,the ostream is currently not needed for the time being.

    void FunctionWithOstream(std::ostream& out)
    {
        out << "Something";
    }
};

在构造函数(或程序中的所有构造函数)的第一个大括号处,我收到以下错误消息:

受保护的函数“std::basic_ostream<_chart _traits>::basic_ostream() [with _CharT=char,_Traits=std::char_traits]”(在“/usr/include/c++/9/ostream”的第 390 行声明)不能通过 "std::basic_ostream" 指针或 objectC/C++(410)

或者对于我在这里粘贴的简短示例代码

"std::basic_ostream<_chart _traits>::basic_ostream() [与 _CharT=char,_Traits=std::char_traits]”(在“/usr/include/c++/9/ostream”的第 390 行声明)不可访问 C/C++(330)

我希望问题足够清楚,并提前感谢您抽出宝贵时间。

您好 提尔曼

解决方法

std::ostream 不是默认可构造的,您可能需要引用/指针:

class Example
{
public:
    Example(std::ostream& out = std::cout) : out(out) {}

    void DoSomething() { FunctionWithOstream(out); }

private:
    std::ostream& out;

    void FunctionWithOstream(std::ostream& os) { os << "Something"; }
};
,

好的,我找到了一个解决方案:

#include <iostream>
#include <sstream>

class Example
{
    public:
    Example(){} //<--Error: "std::basic_ostream<_CharT,_Traits>::basic_ostream() [with _CharT=char,_Traits=std::char_traits<char>]" (declared at line 390 of "/usr/include/c++/9/ostream") is inaccessible C/C++(330)

    void DoSomething()
    {
        FunctionWithOstream(outStream);
    }

    private:
    std::ostringstream outStream; //std::ostringstream instead of std::ostream is working fine.

    void FunctionWithOstream(std::ostream& out)
    {
        out << "Something";
    }
};

可以使用 std::ostream 代替 std::ostream 来接收函数流。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。