这段代码是我正在处理的作业的一部分,但我无法弄清楚为什么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);
}
答案 0 :(得分:2)
std::string::getline()
的第二个参数必须是std::string
,但您要改为MyEnum
。
如果您想阅读std::string
并存储MyEnum
,您需要有一个查找表,以便从一个转换为另一个。
编辑:实际上你刚刚错过了c
和d
,不是吗?
您希望将随机数分配给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);