在编译下面的文件时,我得到从void*
到FILE*
的无效转换错误。它将文件名作为参数并尝试打开文件,如果文件打开则返回
文件指针否则返回 NULL
#include <iostream>
#include <fstream>
using namespace std;
FILE* open(const char filename[]);
int main(int argc, char *argv[])
{
FILE* fp = open("test.txt");
}
FILE* open(const char filename[])
{
ifstream myFile;
myFile.open(filename);
if(myFile.is_open())
return myFile;
else
return NULL;
}
答案 0 :(得分:3)
您的“开放”声称返回“FILE *”但实际上会返回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
}
}
答案 1 :(得分:1)
您无法将std::ifstream
对象作为FILE*
返回。尝试改变:
FILE* open(const char filename[])
到
std::ifstream open(const char* filename)
而不是检查是否已返回NULL
,请使用std::ifstream::is_open()
:
std::ifstream is = open("myfile.txt");
if (!is.is_open()) {
// file hasn't been opened properly
}
答案 2 :(得分:1)
myFile
是ifstream
个对象。
您不能将其作为FILE
指针
此外,您无法返回std::ifstream
,因为它没有复制构造函数
您可以通过引用传递
bool openFile(ifstream& fin, const char *filename) {
fin.open(filename);
return fin.is_open();
}
主要
ifstream fin;
if(!openFile(fin, "input.txt")){
}
答案 3 :(得分:0)
试试这个: -
std::ifstream open(const char* filename)
而不是
FILE* open(const char filename[])
还尝试从return
函数main
中获取一些值。