提问人:Tillman 提问时间:1/21/2021 更新时间:1/21/2021 访问量:334
类中的 std::ostream 对象“无法通过指针或对象访问”
std::ostream object in class is "not accessible through a pointer or object"
问:
我在类中使用了几个函数,这些函数通过函数接口传递一个 ostream,而函数接口又可用于输出错误消息。我希望能够将所有 ostreams 绑定到一个对象,然后在必要时将其重定向到一个文件。
我的代码的相关部分如下所示:
#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<char, std::char_traits>” 指针或 对象C/C++(410)
或者对于我粘贴在这里的简短 excample 代码:
“std::basic_ostream<_CharT, _Traits>::basic_ostream() [与 _CharT=char, _Traits=std::char_traits]“(在”/usr/include/c++/9/ostream“的第 390 行声明)无法访问C/C++(330)
我希望这个问题足够清楚,并提前感谢您抽出时间。
问候 蒂尔曼
答:
0赞
Tillman
1/21/2021
#1
好的,我找到了一个解决方案:
#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。
2赞
Jarod42
1/21/2021
#2
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"; }
};
评论
0赞
Caleth
1/21/2021
我会更改,以便它没有隐藏成员的参数FunctionWithOstream
1赞
Jarod42
1/21/2021
@Caleth:确实,是以OP为借口;-)
评论
std::ostream
不是默认可构造的,您可能需要引用/指针。