“getline”的初学者错误

时间:2013-04-09 22:39:05

标签: c++ getline

这是我第一次发帖提问,所以我希望我能说得对。无论如何,我正在尝试创建一个程序来询问用户字符串,计算字母的类型和数量,然后输出字母的频率。到目前为止,我甚至在获得正确的输入时出错,并且无法弄清楚问题是什么。我的(相关)代码是:

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>

using namespace std;    

string getPhrase(const string & phrase);  //Function for gathering string input
int main()
{
     const string phrase;
     getPhrase(phrase);
     ...
}

string getPhrase(const string &phrase)
{
   cout<<"Enter phrase: "
   getline(cin, phrase);

   return (phrase);
}

当我跑步时,我得到错误:

freq.cpp: In function ‘std::string getPhrase(const std::string&)’:
freq.cpp:21: error: no matching function for call to ‘getline(std::istream&, const
std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’

我不知道我做错了什么,似乎无法在网上发现任何与我正在做的事情有关的事情。

3 个答案:

答案 0 :(得分:1)

您的getPhrase应如下所示:

std::string getPhrase()
{
    std::string result;
    std::cout << "Enter phrase: ";
    std::getline(std::cin, result);
    return result;
}

然后:

int main()
{
    std::string phrase = getPhrase();

    // ...
}

答案 1 :(得分:0)

 const string phrase;

删除函数参数和局部变量声明中的const,否则您无法接受const变量的用户输入,这意味着非可变/不可修改。

如下所示:

string getPhrase(string & phrase);  //Function for gathering string input
int main()
{
     string phrase;
     getPhrase(phrase);
     //...
}

答案 2 :(得分:0)

请注意phraseconst string。这意味着它是常量且无法修改。因此,您无法使用getlinephrase设置为用户的输入。

您应该使用phrase声明string phrase;,然后将getPhrase的参数设为非const参考。

string getPhrase(string& phrase);  //Function for gathering string input
int main()
{
     string phrase;
     getPhrase(phrase);
     ...
}