2014-02-19 203 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 
}