0

C ++では、次のような文字列配列変数があります。

...
/* set the variable */
string fileRows[500];
...
/* fill the array with a file rows */
while ( getline(infile,sIn ) )
{
    fileRows[i] = sIn;
    i++;
}

そしてこれを持っているオブジェクト:

string Data::fileName(){
    return (fileRows);
}

配列を返す関数を作成したいのですが、その後、次のように呼び出します。

Data name(hwnd);
MessageBox(hwnd, name.fileName(), "About", MB_OK);

しかし、私はこのエラーを受け取ります:

'std :: string * {aka std ::basic_string }'を'LPCSTR{ akaconstchar}'に変換できません。引数'2'を'intMessageBoxA(HWND、LPCSTR、LPCSTR、UINT)'に変換できます。

配列の5.要素を表示したい場合、それを変換する方法は?

4

4 に答える 4

5

LPCSTRのエイリアスに他なりませんconst char*。問題は、がオブジェクトをData::fileName()返し、std::stringへの暗黙の変換がないことconst char*です。

std::stringの形式で文字列を取得するには、メソッド、:const char*を使用します。c_str()

MessageBox(hwnd, name.fileName().c_str(), "About", MB_OK);

std::stringまた、オブジェクトの配列を作成したことにも注意してください。

string fileRows[500];

しかし、Data::fileName()あなたはそれを単一のstd::stringオブジェクトとして返そうとしています:

string Data::fileName() {
    return fileRows;
}

std::vectorただし、Cスタイルの配列の代わりに使用することをお勧めします。

配列の5.要素を表示したい場合、それを変換する方法は?

配列を使用するか使用し続けるかに関係std::vectorなく、次のようになります。

std::string Data::fileName() {
    return fileRows[4];
}
于 2013-03-13T21:45:09.257 に答える
2

fileRowsは500要素の配列です。後でn番目の要素にアクセスできるように配列を返す場合は、配列の先頭へのポインタを返す必要があります。例えば:

string* Data::fileName(){
        return fileRows;
}

おそらく使用する方が良いですが:

const string& Data::getFileName(size_t index){
        return fileRows[index];
}

最初の方法を使用すると、次を使用してn番目の要素にアクセスできます。

data.filename()[n];

したがって、配列の5番目の要素にアクセスする場合は、次を使用する必要があります。

data.filename()[4];

一方、関数MessageBoxにはconstchar*が必要です。したがって、ポインタを取得するには、c_str()メソッドを呼び出す必要があります。

Data name(hwnd);
MessageBox(hwnd, name.fileName()[4].c_str(), "About", MB_OK);
于 2013-03-13T22:03:43.833 に答える
1

std :: string :: c_strは、nullで終了する文字のシーケンス(つまり、C文字列)を含む配列へのポインタを提供します。LPCSTR

于 2013-03-13T21:47:45.783 に答える
0

std:stringの関数を使用c_str()してください...この答えを見てください

于 2013-03-13T21:45:20.080 に答える