簡體   English   中英

函數中的默認ofstream類參數

[英]Default ofstream class argument in function

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

您可以使用兩個重載,其中一個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;
}

現在,這樣稱呼它:

std::ofstream ofs("myoutput.txt");
bool result = isPolpierwsza(42, true, ofs.rdbuf());

或者確實沒有參數。

首先,使用ostream而不是ofstream可能是有用的,因為這是更通用的並且被認為是更好的實踐。

然后,您可以簡單地指定'cout'而不是'NULL'。 NULL不起作用,因為ostream不是指針而是結構。 這意味着必須完全填寫結構,並且不能將其指定為NULL。 相反,你可以使用cout,比如

bool isPolpierwsza(int, bool = false, ostream& = cout);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM