您的“打开”声称返回“文件 *”,但实际上返回一个 ifstream。
请注意,“open”与标准库的“open”函数冲突,因此这也可能是函数名的错误选择。
您可以返回一个 ifstream,也可以将其作为参数进行初始化。
bool openFile(ifstream& file, const char* filename)
{
file.open(filename);
return !file.is_open();
}
int main(int argc, const char* argv[])
{
ifstream file;
if (!openFile(file, "prefixRanges.txt"))
// we have a problem
}
如果你真的想从函数中返回文件:
ifstream openFile(const char* filename)
{
ifstream myFile;
myFile.open(filename);
return myFile;
}
int main(int argc, const char* argv[])
{
ifstream myFile = openFile("prefixRanges.txt");
if (!myFile.is_open())
// that's no moon.
}
但是,正如这表明的那样,除非“openFile”要做更多的事情,否则它有点多余。相比:
int main(int argc, const char* argv[])
{
ifstream file("prefixRanges.txt");
if (!file.is_open()) {
std::cout << "Unable to open file." << std::endl;
return 1;
}
// other stuff
}
但是,如果您实际需要的是 FILE*,则必须编写类似 C 的代码,如下所示:
#include <cstdio>
FILE* openFile(const char* filename)
{
FILE* fp = std::fopen(filename, "r");
return fp;
}
int main(int argc, const char* argv[])
{
FILE* fp = openFile("prefixRanges.txt");
if (!fp) {
// that's no moon, or file
}
}
要不就
#include <cstdio>
int main(int argc, const char* argv[])
{
FILE* fp = std::fopen("prefixRanges.txt", "r");
if (!fp) {
// that's no moon, or file
}
}