2014-04-06 98 views
1

我正在寫一個程序,需要從cin讀取輸入到一個字符串。當我嘗試使用常規getline(cin,str)時,它無休止地提示輸入,並且從未移動到下一行代碼中。所以我看了看我的教科書,並且說我可以以cin.getline(str,SIZE)的形式將字符串和字符串的大小傳遞給getline。然而,當我這樣做時,我得到的錯誤「重載函數getline沒有實例匹配參數列表。C++沒有重載的函數getline的實例匹配參數列表

我搜索了周圍,但我發現是人們說使用getline(cin,str)形式導致無限的輸入提示,或者建議在包含的類中可能有兩個不同的getline函數,並且我需要告訴IDE使用正確的(我不知道該怎麼做。)

這是我包括我的文件的開頭:

#include <string> 
#include <array> 
#include <iostream> 
#include "stdlib.h" 
#include "Bank.h" //my own class 

using namespace std; 

這是鱈魚的相關章節E:

 const int SIZE = 30; //holds size of cName array 
     char* cName[SIZE]; //holds account name as a cstring (I originally used a string object in the getline(cin, strObj) format, so that wasn't the issue) 
     double balance;  //holds account balance 

     cout << endl << "Enter an account number: "; 
      cin >> num;  //(This prompt works correctly) 
     cout << endl << "Enter a name for the account: "; 
      cin.ignore(std::numeric_limits<std::streamsize>::max()); //clears cin's buffer so getline() does not get skipped (This also works correctly) 
      cin.getline(cName, SIZE); //name can be no more than 30 characters long (The error shows at the period between cin and getline) 

我使用Visual Studio的C++ 2012,如果是相關

+0

你可以避免大小問題,只要去'string cName; getline(cin,cName);'。如果您遇到問題,請發佈導致問題的代碼。 –

+0

@Matt McNabb本來我有'string name;和getline(cin,name);'和其餘的代碼是相同的,減去char數組和大小常量。但是這導致程序無限地提示輸入,無論我輸入多少個字符或按下多少次輸入都不會結束。任何想法可能會造成這種情況? – daphApple

+0

此代碼中沒有循環,因此它不能「無限」地提示輸入。 –

回答

1

這是有問題的行:

char* cName[SIZE]; 

你真正需要的這裏是:

char cName[SIZE]; 

然後,你應該可以使用:

cin.getline(cName, SIZE); 
+0

沒有標準功能的行爲像那樣;它應該是'SIZE',而不是'SIZE-1'。 –

+0

@MattMcNabb我一直在錯誤的印象。感謝您幫助我更好地理解功能。我從我的回答中刪除了不正確的陳述。 –

+0

謝謝,這解決了錯誤,但現在我堅持使用與getline(cin,stringObject)相同的無限輸入提示符,而這違反了使用cin(cstring,size)作爲解決方法的全部目的。有什麼建議嗎? – daphApple

2

來自visual studio的這個錯誤信息頗具誤導性。其實對我來說,我試圖從const成員函數中調用一個非const成員函數。

class someClass { 
public: 
    void LogError (char *ptr) { 
     ptr = "Some garbage"; 
    } 
    void someFunction (char *ptr) const { 
     LogError (ptr); 
    } 
}; 
int main() 
{ 
    someClass obj; 
    return 0; 
} 
+0

?? OP不提供錯誤消息。 – matsjoyce

相關問題