0

我有功能。如果用户没有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或“假”?

4

3 回答 3

2

您可以使用两个重载,其中一个std::ofstream参数:

bool isPolpierwsza(int liczba, bool wypisz)
{
    return isPolpierwsza(liczba, wypisz, /* your own argument */);
}
于 2013-10-19T19:12:11.563 回答
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());

或者实际上,没有参数。

于 2013-10-19T19:15:34.037 回答
-2

首先,使用 ostream 代替 ofstream 可能会很有用,因为这更通用并且被认为是更好的做法。

然后,您可以简单地分配“cout”而不是“NULL”。NULL 不起作用,因为 ostream 不是指针而是结构。这意味着结构必须完全填写并且不能分配为NULL。相反,您可以使用 cout,例如

bool isPolpierwsza(int, bool = false, ostream& = cout);
于 2013-10-19T18:27:31.920 回答