【问题标题】:FileReader issue C++FileReader 问题 C++
【发布时间】:2013-02-24 22:38:14
【问题描述】:

在old question I posted here earlier 上,我询问了我在 FileOpen 函数上遇到的问题。这个新问题与第二部分有关:FileReader。

我进行了更改,但仍然有编译器错误。

麻烦的代码如下:

FILE *FileReader(FILE *fname){
    ifstream inputFile;
    inputFile.open(fname);

    if(inputFile){
        string line = "";
        //int num_chars;

        while(getline(inputFile, line)){
            //num_chars = strlen(text) + 1;
            //line = (string *)malloc(sizeof(string)*num_chars)
            int i = 0;
            if(i <= 3 ){
                storString[i] = line;
                storage[i] = atoi(storString[i].c_str());
                i++;
            }
            else{
                string firstTwo = line.substr(0,1);
                const int hex = atoi(firstTwo.c_str());
                setOperations(hex);
                string commandOne = firstTwo.substr(0,0); //first part of command
                string commandTwo = firstTwo.substr(1,1); //second part of command and n-i flags
                string restFlags = line.substr(2,2); //xbpe flags
                rest = line.substr(3);
                int disp = atoi(rest.c_str());

                if(format == "fmt2"){
                    string rOne = line.substr(2,2);
                    int registerOne = atoi(rOne.c_str());
                    string rTwo = line.substr(3,3);
                    int registerTwo = atoi(rTwo.c_str());
                    registerOperation(hex, registerOne, registerTwo);
                    break;
                }
                setFlags(commandTwo, restFlags, disp);
            }
        }
    }
}

输出如下错误:

a1/a1.cpp: 在函数FILE* FileReader(FILE*):
a1/a1.cpp:338: 错误: 没有匹配函数调用std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::open(FILE*&amp;)
/opt/local/bin/../lib/gcc/sparc-sun-solaris2.10/3.4.6/../../../../include/c++/3.4.6/fstream:570:注意:候选人是:void std::basic_ifstream<_CharT, _Traits>::open(con st char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits]

编辑:

查看那些被注释掉的行。我也尝试了这些,但不知道如何实现它们。谁能帮帮我?

【问题讨论】:

标签: c++ file


【解决方案1】:

inputfile.open() 方法需要一个 c 风格的文件名字符串作为参数;它也可以是一个将该名称存储为值的变量。假设文件名是 inputFile.txt,你可以这样做:

inputFile.open("inputFile.txt");

你也可以这样做:

string fileName = "inputFile.txt";
inputFile.open(fileName.c_str());

另外,关于代码后面部分的注释:不要使用if(inputfile),而是使用 is_open() 方法。所以,你会写if(inputfile.is_open())。该方法返回一个布尔值,取决于打开文件是否成功。

【讨论】:

  • 好的,我把它改成了字符串。但我得到了相同的行,文件被替换为 &string
  • 这还不够,因为open()方法的参数必须是C-STYLE字符串;即,以 '\0' 字符结尾的字符数组。为了从字符串对象中获取它,您必须调用 c_str() 方法,如我提供的响应中所示。另外,请确保,如果您更改了方法中的参数,您也将调用者函数中的参数更改为字符串。
【解决方案2】:

http://www.cplusplus.com/reference/fstream/ifstream/open/

inputFile.open is being passed a `FILE *` but needs `const char *`

尝试将硬编码字符串传递给它,例如"some_file.txt",或者传递给它一个实际的const char *

【讨论】:

  • 如果文件不是.txt,而是.sic怎么办?
  • 如果是包含文本的文件,扩展名无关紧要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2019-05-21
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
相关资源
最近更新 更多