如何将字符串传递给函数?

时间:2012-05-02 23:15:19

标签: c++

我正在尝试使用重载函数来获取字符串。

void get(char prompt[], int size,const std::string b = "")
{
    std::cout << prompt << ": ";  
    std::cin.get(b, size);  
    std::cin.ignore(10, '\n');  
}

现在我只是根据本网站上另一张海报的建议将字符数组中的最后一个参数更改为字符串,所以我有点迷失了。我在'''收到错误消息。在cin和get之间。我也试过cin.getline(我不知道是否存在差异或者它是什么)

  

错误消息:无法将参数1从'const std :: string'转换为   'char *'

错误有很多其他的东西,但我认为这是重要的一点。

3 个答案:

答案 0 :(得分:3)

我通过建议另一种方法间接回答你的问题。这是我的实现,以及如何使用它的示例。

#include <string>
#include <iostream>
#include <ostream>

std::string get(std::string const& prompt)
{
  std::string ret;
  std::cout << prompt << ": ";
  getline(std::cin, ret);
  return ret;
}

int main()
{
  std::cout << get("Please enter your answer") << std::endl;

  // or
  std::string prompt("Enter your answer");
  std::string response = get(prompt);
  std::cout << response << std::endl;
}

答案 1 :(得分:3)

使用字符串时,需要使用字符串头中的自由函数getline,而不是来自iostream的成员函数getline。所以它会是std::getline(std::cin, b);

据说getline将不接受const string作为其参数,原因很简单,因为调用getline的全部内容是写入字符串。另请注意,除非您将b作为(非常量)引用,否则您在b方法中对get执行的任何更改都不会在方法之外显示,因为如果字符串被复制,则你按值传递它们。

istream::get(char*, streamsize)istream::getline(char*, streamsize)之间的区别在于后者丢弃了换行符(对于字符串的getline方法也是如此),而前者则没有。

答案 2 :(得分:0)

http://www.cplusplus.com/reference/iostream/istream/get/

http://www.cplusplus.com/reference/iostream/istream/ignore/

你对get()的调用与任何现有的istream方法都不匹配。它可能最终会被递归,如果它有效吗?

#include <string>

namespace std {
    //I am attempting to use an overloaded function to get a string.
    class Ciostream : public iostream {
        public:
        void get(char prompt[], int size,const std::string b = "")
        {
            cout << prompt << ": ";
            cin.get(b, size);
            cin.ignore(10, '\n');
        }


    };
}
//1.cpp:11:28: error: no matching function for call to 'std::basic_istream<char>::get(const string&, int&)'