2016-09-11 66 views
0

我得到這個錯誤,我無法弄清楚:C++函數getline錯誤

沒有重載函數「函數getline」的實例相匹配的參數列表 參數類型有:(的std :: istream的, MyEnum)

代碼

enum MyEnum // Needs to be before the struct that uses it 
{ 
    Dog, Cat, Fish, Squirrel 
}; 
struct MyStruct 
{ 
    int a; 
    float b; 
    string c; 
    MyEnum d; 
}; 
int main() 
{ 
    char myCString[arraySize] = { 0 }; 
    char myOtherCString[] = { "Yet another string" }; 
    int myInt[4] = { 27, 39, 0, 42 }; 
    string myString; 
    MyStruct aStruct = { 4, 3.5, "Dogs", Dog }; 
    int x; 
    int * pX = &x; 
    array <MyStruct, arraySize> Animals; 
    // Storing values in uninitialized variables 
    myCString[0] = 'A'; 
    myString = "A third string"; 
    x = 4; 
    for (int i = 0; i < arraySize; i++) 
    { 
     Animals[i].a = rand() % 10; 
     Animals[i].b = rand() % 100/100.0; 
     Animals[i].c = MyEnum(rand() % 4); 
     cout << "Enter a name: "; 
     getline(cin, Animals[i].d); 
    } 
+0

'arraysize'未定義。請發佈一個[MCVE](http://stackoverflow.com/help/mcve),你有90%的方式。還錯過了其他一些線路。 –

回答

1

你可能想輸入Animals[i].c,BEC因爲cstring,而d不是。

而且,你可能要分配MyEnum(rand() % 4);Animals[i].d

for (int i = 0; i < arraySize; i++) 
{ 
    Animals[i].a = rand() % 10; 
    Animals[i].b = rand() % 100/100.0; 
    Animals[i].c = MyEnum(rand() % 4); 
    //  ^^^ 
    // Change it to Animals[i].d 
    cout << "Enter a name: "; 
    getline(cin, Animals[i].d); 
    //      ^^^ 
    // Change it to Animals[i].c 
} 

這只是一個糟糕的命名風格,你應該有一個變量一些有意義的名字,有一些有意義的名字,你可能永遠不會有這種的錯誤。

+1

+1爲了正確地指出這一點,如果OP沒有爲類型和變量選擇這樣的窮人(閱讀:可怕的)名字,他/她就永遠不會遇到這個問題。 – ray