我有功能。如果用户未在此函数中提供ofstream
元素:
bool isPolpierwsza(int, bool = false, ofstream = NULL);
比我想要“plik”
bool isPolpierwsza(int liczba, bool wypisz, ofstream plik)
到NULL
值。
我的编译器输出错误:
2.9.cpp:5:48:错误:没有可行的从'long'转换为'ofstream'(又名'basic_ofstream')
bool isPolpierwsza(int, bool = false, ofstream = NULL);
如何设置ofstream的默认值,以便将其视为NULL
或“false”?
答案 0 :(得分:2)
您可以使用两个重载,其中一个不采用std::ofstream
参数:
bool isPolpierwsza(int liczba, bool wypisz)
{
return isPolpierwsza(liczba, wypisz, /* your own argument */);
}
答案 1 :(得分:1)
您可以改为传递流缓冲区:
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());
或者确实,没有参数。
答案 2 :(得分:-1)
首先,使用ostream代替ofstream可能很有用,因为这更为通用,被认为是更好的做法。
然后,您可以简单地指定'cout'而不是'NULL'。 NULL不起作用,因为ostream不是指针而是结构。这意味着必须完全填写结构,并且不能将其指定为NULL。相反,你可以使用cout,比如
bool isPolpierwsza(int, bool = false, ostream& = cout);