-1

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

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 *'

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

4

3 回答 3

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;
}
于 2012-05-02T23:19:22.880 回答
3

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

话虽这么说getline,但不会接受 aconst string作为其参数,原因很简单,即调用的全部getline目的是写入字符串。另请注意,除非您进行b(非常量)引用,否则您在方法b内部执行的任何更改get都不会在方法外部可见,因为如果您按值传递字符串,则会复制字符串。

istream::get(char*, streamsize)和之间的区别在于istream::getline(char*, streamsize)后者丢弃换行符(就像getline字符串的方法一样),而前者没有。

于 2012-05-02T23:20:04.430 回答
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&)'
于 2012-05-03T00:10:59.823 回答