函数中的默认ofstream类参数

时间:2013-10-19 18:22:14

标签: c++ arguments

我有功能。如果用户未在此函数中提供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”?

3 个答案:

答案 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);