2013-04-09 101 views
0

这是我第一次发布一个问题,所以我希望我得到这个权利。无论如何,我试图创建一个程序,要求用户输入一个字符串,计算字母的类型和数量,然后输出字母的频率。到目前为止,即使得到正确的输入,我也有一个错误,只是无法弄清楚问题所在。我的(相关)的代码是:初学者错误“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> >&)’ 

我不知道我做错了,并且似乎无法找到任何与我在做什么相关的在线内容。

+2

你是什么原因让'phrase'成为'const'变量?我想知道,所以我们可以帮助你理解为什么它是错的。 :) – 2013-04-09 22:42:01

+0

如果你是初学者,你绝对应该学习21世纪的C++,永远不要说'滥用名字空间std;'。上世纪80年代,伪造的伪教授提出了这个问题,但这并不意味着这是可以接受的。 – 2013-04-09 22:42:06

+0

@sftrabbit它是我的介绍C++类提供给我的模板哈哈,我删除了“const”部分,并在某些地方使用了一些“std ::”,如下面的建议和它的最终工作 – user2250690 2013-04-09 22:55:19

回答

0
const string phrase; 

除去const在功能参数和局部变量声明因为否则不能接受用户输入到一个可变const,这意味着nonchangable /不可修改的。

类似如下:

string getPhrase(string & phrase); //Function for gathering string input 
int main() 
{ 
    string phrase; 
    getPhrase(phrase); 
    //... 
} 
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(); 

    // ... 
} 
0

注意phraseconst string。这意味着它是不变的,不能修改。因此,您不能使用getlinephrase设置为用户的输入。

您应该声明phrasestring phrase;,然后使参数getPhrase为非const参考。

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