2014-02-19 170 views
0

我想从string的文本文件中读取第3行,将其转换为long long int,然后返回该值。将字符串转换为long long int

上的文本文件的第3行的数据是123456789

long long int File::Getline3(int user1, int user3) 
{ 
    std::string filename = std::to_string(user1); 

    std::ifstream fin(filename + ".txt"); 
    fin.getline (line1, 5); 
    fin.getline (line2, 5); 
    fin.getline (line3, 20); 
    fin.close(); 

    // convert line 3 to a string called str 
    const char *line3; 
    std::string str(line3); 

    // convert str to long long int called user3 
    long long int strtoll(const char *nptr, char **endptr, int base); 
    char* endptr = NULL; 
    user3 = strtoll(str.c_str(), &endptr, 10); 

    return user3; 
} 

的意见均显示什么,我认为我做的,但我可能是错的(我是新来的指针) 。

当我尝试构建我的程序时,出现“无法解析的外部”错误。

+0

用什么解释任何答案,请 – user3001499

+0

代码没有编译 – Raxvan

+0

没有,错误是“无法解析的外部” – user3001499

回答

3
long long int strtoll(const char *nptr, char **endptr, int base); 

此行声明功能。这意味着当您拨打strtoll几行时,您将调用该函数,因为它是最明显的候选项。但是,你从来没有定义它。

相反,你的意思是叫std::strtoll,这定义(标准库),并会通过你的推测using namespace std指令中发现,如果你通过虚报的这种不存在的功能不隐藏它你自己的同名。 :)

只需去除多余的宣言:你的const char* line3,你在函数内部声明

// convert str to long long int called user3 
char* endptr = NULL; 
user3 = strtoll(str.c_str(), &endptr, 10); 

您也有类似的问题,从来没有指派任何东西,然后构造一个串出的。这是不明确的;指针未初始化。假设你有一些line3数据成员(以及你的line1line2),你再次隐藏它与一个相同名称的局部变量

最后,将user3按值传递是完全毫无意义的,如果您只是写入并返回它。删除该参数。

把所有这些组合起来,你的代码也许应该是这样的:

// convert line3 to long long int 
char* endptr = NULL; 
return strtoll(line3, &endptr, 10); 

总之,少申报快乐!

+0

它现在编译至少,但是返回的值仍然不是文本文件的第3行,但是10个随机数字,有什么建议? – user3001499

+0

也strtoll没有工作,通过一个错误说它是未定义的,所以不得不将其更改为strtol,这可能是为什么它不能正常工作? – user3001499

+0

我不会在注释中一行一行地反复调试程序......但是如果您查看['strtoll']手册(http://en.cppreference.com/w/cpp/string/byte/strtol)从C++ 11开始,你将会看到它是用C++语言编写的(尽管如果你在Linux上,你应该通过POSIX使用它)。 –

0
long long int File::Getline3(int user1) 
{ 
    std::string filename = std::to_string(user1); 

    std::ifstream fin(filename + ".txt"); 

    std::string line1, line2; // place to actually store the lines 

    getline(fin, line1); // read a line 
    getline(fin, line2); // read another line 

    long long int number_on_line_3; // somewhere to store the number 
    fin >> number_on_line3;   // store the number 
    fin.close(); 

    return number_on_line_3;  // return the number 
}