C++ 函数中流类参数的默认值
我有功能。如果用户未在此函数中提供流元素的C++ 函数中流类参数的默认值,c++,arguments,C++,Arguments,我有功能。如果用户未在此函数中提供流元素的: bool isPolpierwsza(int, bool = false, ofstream = NULL); 比我想说“plik” 到NULL值 我的编译器输入错误: 2.9.cpp:5:48:错误:从“长”到“流”(也称为“基本流”)没有可行的转换 bool-isPolpierwsza(int,bool=false,ofstream=NULL) 如何将默认值设置为ofstream,以便将其视为NULL或“false”?首先,使用ostream而
:
bool isPolpierwsza(int, bool = false, ofstream = NULL);
比我想说“plik”
到NULL
值
我的编译器输入错误:
2.9.cpp:5:48:错误:从“长”到“流”(也称为“基本流”)没有可行的转换
bool-isPolpierwsza(int,bool=false,ofstream=NULL)代码>
如何将默认值设置为ofstream,以便将其视为NULL
或“false”?首先,使用ostream而不是ofstream可能会很有用,因为这是一种更普遍的做法,被认为是更好的做法
然后,您可以简单地分配'cout'而不是'NULL'。NULL不起作用,因为ostream不是指针而是结构。这意味着必须完全填写结构,并且不能将其赋值为NULL。相反,你可以用cout,比如
bool isPolpierwsza(int, bool = false, ostream& = cout);
您可以使用两个重载,其中一个重载不接受std::ofstream
参数:
bool isPolpierwsza(int liczba, bool wypisz)
{
return isPolpierwsza(liczba, wypisz, /* your own argument */);
}
您可以改为传递流缓冲区:
bool isPolpierwsza(int, bool = false, std::streambuf* osbuf = nullptr)
{
std::ostream os(osbuf? osbuf : std::cout.rdbuf());
os << "yay it works\n";
return false;
}
或者实际上,没有参数。这与C有什么关系?用不同的函数重载它。毕竟,它是C++。所以提供两个版本;没有流(首先应该是引用)的流。of stream
不是指针。不能将其设置为NULL
。NULL
宏很可能被定义为0L
,因此出现此错误。通常不存在“NULL值”之类的内容。有些类型(例如指针或可选类型)有这样的概念,但大多数类型没有。这甚至不会编译。流不能按值公开复制。最后一个参数需要是一个引用。这将把内容打印到标准输出;我猜OP根本不想打印东西@0x499602D2好吧,这感觉更像是IOStream库设计的精神(我知道,这会伤害很多人的眼睛),如果意图不是在wypisz=false
时写任何东西,你会用什么作为你自己的论点?与NULL
类似的东西似乎是正确的……是的,您只需将NULL
作为第三个参数传递,但我认为NULL
不能用于流的@sancho.srestemonicacellio将流的参数更改为指针。(ofstream*
)。@sancho.srestestemonicacellio,然后使用if语句检查流的是否有效:if(wypisz){…}
。为了使用它,您可以像(*stream
)一样取消引用它。
bool isPolpierwsza(int, bool = false, std::streambuf* osbuf = nullptr)
{
std::ostream os(osbuf? osbuf : std::cout.rdbuf());
os << "yay it works\n";
return false;
}
std::ofstream ofs("myoutput.txt");
bool result = isPolpierwsza(42, true, ofs.rdbuf());