Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何包括getline?_C++ - Fatal编程技术网

C++ 如何包括getline?

C++ 如何包括getline?,c++,C++,这是我的代码: #include <iostream> #include <istream> #include <iomanip> #include <cstring> #include <string> using namespace std; int main() { string firstName[20]; string lastName[20]; string fullName[40]; st

这是我的代码:

#include <iostream>
#include <istream>
#include <iomanip>
#include <cstring>
#include <string>
using namespace std;

int main()
{
    string firstName[20];
    string lastName[20];
    string fullName[40];
    string friendsName;
    cout << "Enter your first name: ";
    getline(cin, fullName);
    return 0;
}

它一直在告诉我,我没有包括要使用getline需要包含的内容。

你把C风格的字符串和std::string混淆了

这:


是一个包含40个字符串的数组,而不是一个包含40个字符的字符串。

您将C样式字符串与std::string混淆

这:

是由40个字符串组成的数组,而不是由40个字符组成的单个字符串。

std::string是一个长度可变的字符容器。声明它时不需要指定它的最大大小,当然也不需要使用[]语法

字符串firstName[20];是一个20个C++字符串数组。 charfirstname[20];是一个包含20个字符的数组,可以将其视为单个C样式字符串

getline希望填充单个std::字符串,而不是std::字符串数组。所有string[]数组都应该是单个std::strings,例如:

包括 包括 使用名称空间std; int main { 字符串名; 字符串lastName; 字符串全名; coutstd::string是一个长度可变的字符容器。声明它时,不需要指定它的最大大小,当然也不需要使用[]语法

字符串FixNeX[20;是20个C++字符串的数组。< /P> char firstName[20];是一个由20个字符组成的数组,可以将其视为单个C样式字符串

std::getline希望填充单个std::string,而不是std::string数组。所有string[]数组都应该是单个std::string,例如:

包括 包括 使用名称空间std; int main { 字符串名; 字符串lastName; 字符串全名;
cout fullName是一个由40个字符串组成的数组,而不是单个字符串。请将您的确切错误消息复制并粘贴到问题正文中。更改字符串fullName[40];to string fullName;执行类似于firstName和lastName的操作。您不需要一个包含40个名称的数组。std::string不是这样工作的。它将根据getline的输入分配所需的大小。对于我们许多人来说,错误号几乎毫无价值。我们使用的是不同的编译器。在底部靠近错误列表选项卡的地方,您将找到Out输出选项卡。在输出选项卡中,您可以找到完整的纯文本生成输出。您可以复制文本并将其粘贴到问题中。请注意,完整的生成输出通常包含您自己解决问题所需的额外提示。全名是一个由40个字符串组成的数组,而不是单个字符串。请复制并粘贴您的确切的e错误消息进入问题正文。更改字符串全名[40];to string fullName;执行类似于firstName和lastName的操作。您不需要一个包含40个名称的数组。std::string不是这样工作的。它将根据getline的输入分配所需的大小。对于我们许多人来说,错误号几乎毫无价值。我们使用的是不同的编译器。在底部靠近错误列表选项卡的地方,您将找到Out输出选项卡。在输出选项卡中,您可以找到完整的纯文本生成输出。您可以复制文本并将其粘贴到问题中。请注意,完整的生成输出通常包含您自己解决问题所需的额外提示。这是有用的信息,但它没有向OP解释如何解决问题或为什么创建字符串数组会导致std::getline出错。这是有用的信息,但没有向OP解释如何解决此问题,也没有解释为什么创建字符串数组会导致std::getline出错。
// C-style
char str[40];

// std::string
std::string str;
string fullName[40];