C ++ - 将文件处理程序传递给函数以便打开时出错

时间:2014-04-21 02:15:47

标签: c++ file function

我有一些我不理解的错误,甚至不确定如何在互联网上搜索。我试过用C ++函数打开文件,"以及确切的错误,0但在前几页没有得到很多帮助。这让我头疼了一段时间,甚至我的导师都不能帮助我。虽然这是他想要的方式,不知何故。是的,这是一个家庭作业。

错误:

  

\ driver.cpp:在函数void openFile(std::ifstream&, std::ofstream&)': \driver.cpp:63: error: no matching function for call to std :: basic_ifstream> :: open(std :: string&)'   ../include/c++/3.4.2/fstream:570:注意:候选人是:void std :: basic_ifstream< _CharT,_Traits> :: open(const char *,std :: _ Ios_Openmode)[with _CharT = char,_Traits = std :: char_traits]   J:\ Class_Files_2013_Fall \ Advanced C ++ \ Week1 \ Lab_2(Letter_Counter)\ driver.cpp:68:错误:没有匹配函数来调用`std :: basic_ofstream> :: open(std :: string&)'   ../include/c++/3.4.2/fstream:695:注意:候选人是:void std :: basic_ofstream< _CharT,_Traits> :: open(const char *,std :: _ Ios_Openmode)[with _CharT = char,_Traits = std :: char_traits]

所以在主要方面,我有:

    ifstream inFile;                    
//defines the file pointer for the text document
    ofstream outFile;                   
//the file pointer for the output file

    openFile(inFile, outFile);          
//allow the user to specify a file for reading and outputting the stats

然后功能:

void openFile(ifstream& inF, ofstream& outF){
    // Ask the user what file to READ from
    string readFile, writeFile;
    cout << "Enter the name of the file you want to READ from: ";
    cin >> readFile;
    cout << endl;
        // Open the File
    inF.open(readFile);
    // Ask the user what file to WRITE to
    cout << "Enter the name of the file you want to WRITE to: ";
    cin >> writeFile;
    cout << endl;
    outF.open(writeFile);
}

我也实现了:

#include <fstream>

using namespace std;

主要的东西是由教师放在那里的,所以我无法改变这些。换句话说,我必须将文件指针传递给openFile函数并询问用户文件的名称。但是,我从未被教过如何做到这一点。一个基本的答案将被赞赏,远离我已经做过的事情。

3 个答案:

答案 0 :(得分:2)

轻松修复:

inF.open(readFile.c_str());
outF.open(writeFile.c_str();

两个函数都希望您传入一个const char *作为第一个参数。你试图传递一个字符串。

答案 1 :(得分:2)

只有C ++ 11支持使用std::string s打开fstream。

使用C ++ 11兼容性编译您的应用程序(取决于编译器,对于clang和gcc是-std=c++11),或将您的调用更改为inF.open(readFile.c_str());

答案 2 :(得分:1)

no matching function for call to std::basic_ifstream::open(std::string&)

当你看到&#34;没有匹配的功能&#34;错误它意味着编译器搜索但找不到一个接受你给出的参数的函数。在这种情况下,它无法找到带open()的函数std::string&的重载。

从C ++ 11开始,输入和输出文件流类提供了构造函数的重载以及以open()作为参数的std::string成员函数。不幸的是,如果您的编译器不支持C ++ 11,那么您将不得不采用const char*代替的重载。您可以通过调用c_str()方法获取指向缓​​冲区的指针:

inF.open(readFile.c_str());   // calls open(const char*)
outF.open(writeFile.c_str()); // calls open(const char*)