参数'1'的'std :: string'转换为'char **'为'__ssize_t getline(char **,size_t *,FILE *)'

时间:2015-09-12 14:58:02

标签: c++ string

#include <iostream>
#include <fstream>
#include <stdio.h>

using namespace std;

int count1(string fileName){

    ifstream infile;
    if (!infile)
        throw "file cannot be opened";
    else{
        int spaces = 0;
        while(getline(fileName,spaces)){
            for(int i=0;i<fileName.size();i++){
                if(fileName[i]==' ')
                    spaces++;
            }
        }
        return spaces;
     }
}

int count2(string fileName){
    int line = 0;
    while(getline(fileName,line)){
        for(int i=0;i<fileName.size();i++)
           if(fileName[i]=='\n')
              line++;
    }
    return line;
}

int count3(string fileName){
    int characters = fileName.size();
    return characters;
}


int main(int argc, char **argv)
{
    int spaces,line,characters = 0;
    ifstream infile;
    infile.open("fox.txt");
    try{
         int result1 = count1(argv[1]);
         int result2 = count2(argv[1]);
         int result3 = count3(argv[1]);
         cout<<result1<<' '<<result2<<' '<<result3<<endl;
    } catch (const char *e) {
        cout<<e<<endl;
    }
}

//此程序的要点是正确计算文件中的字符数,空格数和行数。文件名将被接受为程序的参数。我应该检查文件是否存在并且可以在try-catch块中打开,如果无法打开文件则抛出异常。我一直只在第13和24行得到错误:无法将'std :: string'转换为'char **'以将参数'1'转换为'__ssize_t getline(char **,size_t *,FILE *)'

1 个答案:

答案 0 :(得分:0)

您的代码存在很多问题。

让我们从:

开始
int main(int argc, char **argv)
{
    int spaces,line,characters = 0; // Delete this line
    ifstream infile;                // Delete this line
    infile.open("fox.txt");         // Delete this line
    try{
        int result1 = count1(argv[1]);
        int result2 = count2(argv[1]);
        int result3 = count3(argv[1]);
        cout<<result1<<' '<<result2<<' '<<result3<<endl;
    } catch (const char *e) {
        cout<<e<<endl;
    }
}

所有这些都不在main()中使用!您似乎在理解变量的范围时遇到了问题,即何时变量可访问/有效。 main()中的变量声明在从main()调用的函数中不可访问。

因此,在每个功能中,您需要再次打开文件。类似的东西:

ifstream infile;
infile.open(filename);
if (!infile)
    throw "file cannot be opened";

所有三个功能。

然后是getline - 使用

getline(infile,spaces))

代替。