-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

文字列を操作する場合は、iostream のメンバー関数 getline ではなく、文字列ヘッダーのフリー関数 getline を使用する必要があります。ですstd::getline(std::cin, b);

そうは言っても、呼び出しの全体的なポイントは文字列に書き込むことであるという単純な理由で、引数としてgetlinea を受け入れません。また、(非定数) 参照を作成しない限り、値で渡すと文字列がコピーされるため、メソッド内で実行した変更はメソッドの外部には表示されないことに注意してください。const stringgetlinebbget

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 に答える