2

私は C++ に非常に慣れていないので、しばらくいじっています。これらのエラーについて何らかの洞察が得られれば、私は大いに感謝します。次のプログラムは、次の結果を生成する必要があります。

#include <iostream>
#include <string>

using namespace std;

string Cut(string &strString, int nStart, int nLength)
    {
        string strCopy;
        strString.copy(strCopy, nLength, nStart);
        strString.erase(nStart, nLength);
        return strCopy;
    }

int main()
{
    string strHate = "I hate tuna.";
    cout << strHate << endl;
    string strTuna;
    strTuna = Cut(strHate, 8, 4);
    cout << strHate << endl;
    cout << strTuna << endl;
}

生成する必要があります

I hate tuna.
I hate .
tuna

ただし、代わりに次のエラー メッセージが表示されます。

9|error: no matching function for call to 'std::basic_string<char>::copy(std::string&, int&, int&)'

とても有難い、

クレプトカット

4

2 に答える 2

2

ここで参照されているように、関数std::string.copyはタイプのパラメーターを受け取ります。タイプchar *のパラメーターを指定しましたstring

これはより良い解決策です:

string Cut(string &strString, int nStart, int nLength){
    string strCopy (strString, nStart, nLength);
    strString.erase(nStart, nLength);
    return strCopy;
}

これにより、コンストラクターから直接古い文字列から新しい文字列が作成されるため、もう少しエレガントです。

エラーが発生した理由を知るために、変数のデータ型 ( intcharstringなど) は、関数が受け取ると予想されるデータ型と一致する必要があります。関数が受け取るデータ型がわからない場合は、いつでも Google で調べることができます。

また、次を使用する必要があります。

strTuna = Cut(strHate, 7, 4)

それ以外の:

strTuna = Cut(strHate, 8, 4)

これは、文字列の最初の文字の位置が0ではなく であるため1です。

于 2013-06-02T04:48:47.290 に答える
1

あなたのケースで使用string::substrする方がおそらくより適切です:

string Cut(string &str, int nStart, int nLength)
{
  string strCopy = str.substr(nStart, nLength);
  str.erase(nStart, nLength);
  return strCopy;
}
于 2013-06-02T04:55:03.000 に答える