当前位置: 首页 > 知识库问答 >
问题:

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

曾瀚昂
2023-03-14

我在一个类中使用了几个函数,这些函数通过函数接口传递给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\u ostream

或者对于我粘贴在此处的简短示例代码:

“std::basic\u ostream

我希望问题足够清楚,并提前感谢您的时间。

你好Tillman

共有2个答案

慎兴业
2023-03-14

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

#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::ostringstream来接收函数流。

颛孙凯定
2023-03-14

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"; }
};
 类似资料:
  • 6.2. 基于指针对象的方法 当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要更新一个变量,或者函数的其中一个参数实在太大我们希望能够避免进行这种默认的拷贝,这种情况下我们就需要用到指针了。对应到我们这里用来更新接收器的对象的方法,当这个接受者变量本身比较大时,我们就可以用其指针而不是对象来声明方法,如下: func (p *Point) ScaleBy(factor float64

  • 本文向大家介绍js中通过getElementsByName访问name集合对象的方法,包括了js中通过getElementsByName访问name集合对象的方法的使用技巧和注意事项,需要的朋友参考一下 1、查找给定name属性的所有元素,这个方法将返回一个节点集合,也可以称为对象集合。 2、这个集合可以作为数组来对待,length属性的值表示集合的个数。 3、因为在html页面中,name不能唯

  • 问题内容: 就像是 这是我想象的格式,但事实并非如此。什么会退回到对象的父级? 问题答案: JavaScript本身不提供此功能。而且我怀疑您是否可以创建这种类型的功能。例如: 鲍比属于谁?

  • 问题内容: 我正在尝试向我的Watchkit扩展发送“类”,但出现此错误。 由于未捕获的异常’NSInvalidUnarchiveOperationException’而终止应用程序,原因:’ -[NSKeyedUnarchiver encodeObjectForKey:]:无法解码类(MyApp.Person)的对象 存档和取消存档在iOS App上运行良好,但在与watchkit扩展进行通信时

  • 请考虑以下代码: 我想要一个指针,指向一个特定的对象,在一个向量,当耳环这个对象,指针也应该被删除,或指向空或类似的东西。同样,当我有一个指向矢量位置3的对象的指针时,我希望这个指针在移除例如对象1之后指向位置2,因为对象3向左“移动”了一个位置。这样的事情是可以实现的还是我应该尝试一种不同的方法?我刚开始学习C++所以我对任何高级概念都不是很熟悉。

  • 我正在努力解决一个奇怪的问题。 控制台是 如您所见,第一行输出了GeneratorField对象的名称,但是为什么第二个命令失败了? 我正在使用Freemarker 2.3.20 谢啦