你的“open”声明返回“FILE *”,但实际返回一个ifstream。
请注意,“打开”与标准库的“打开”功能冲突,所以这也可能是功能名称的一个糟糕的选择。
您可以返回一个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
}
如果你真正需要的,不过,是一个文件*,你必须写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
}
}
转换从NULL到FILE *是最少的问题。你也从std :: ifstream转换为FILE *,这是完全不同的结构,更不用说一个是局部变量而另一个是指针。另外,你没有从main返回一个值。 –