getline(cin)与数组有问题

时间:2017-11-04 17:13:02

标签: c++

这段代码是我正在处理的作业的一部分,但我无法弄清楚为什么getline会一直返回“没有重载函数的实例”错误。我在这里包含了相关的代码,而这一行是在底部。任何帮助得到动物[i] .d的“名字”将是值得赞赏的,因为我确信它很简单。谢谢。

#include <iostream> // provides access to cin and cout
#include  <array>// provides access to std:array
#include <string> // required for getline

//--end of #include files-----------
//----------------------------------

using namespace std;
//----------------------------------

//**begin global constants**********
const int arraySize = 4; // **there is a subtle bug here (needs "const")
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;
};

//--end of global constants---------
//----------------------------------


//**begin main program**************
int main()
{
    // Initialization
    char myCString[arraySize] = { 0 };
    char myOtherCString[] = { "Yet another string" };
    int myInt[4] = { 27, 39, 0, 42 };
    string myString;
    MyStruct aStruct = { 4,3.5,"Dog", Dog};
    int x;
    int * pX;
    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);
    }

2 个答案:

答案 0 :(得分:2)

std::string::getline()的第二个参数必须是std::string,但您要改为MyEnum

如果您想阅读std::string并存储MyEnum,您需要有一个查找表,以便从一个转换为另一个。

编辑:实际上你刚刚错过了cd,不是吗? 您希望将随机数分配给d,将您使用getline()读取的字符串分配给c

答案 1 :(得分:1)

您使用了错误的函数getline参数。 MyEnum不是string。使用此:

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);
istream& getline (istream&& is, string& str);