web-dev-qa-db-ja.com

エラー]簡単にコピーできないタイプのオブジェクト 'std :: string {aka class std :: basic_string <char>}'を '...'で渡すことはできません

#include <stdio.h>
#include <string>
main()
{
int br_el[6],i;
std::string qr_naziv[6];

    qr_naziv[0]="Bath tub";

    qr_naziv[1]="Sink";

    qr_naziv[2]="Washing machine";

    qr_naziv[3]="Toilet";

    qr_naziv[4]="Kitchen sink";

    qr_naziv[5]="Dish washer";


for(i=0;i<6;i++)
    {

        printf("Input the number for %s =",qr_naziv[i]);\\here lies the problem

scanf("%d",&br_el[i]);
}

このプログラムははるかに長いので、短縮しました。問題は、配列br_el[6]、そして私はそれが私が番号を入力しているオブジェクトのために私にそれを見せたいです!コンパイルしようとすると、エラーが発生します:「[エラー]コピーできないタイプのオブジェクト 'std :: string {aka class std :: basic_string}'を '...'に渡せません」宣言string qr_naziv[6];しかし、文字列は太字でさえなかったので機能しなかったので、グーグルで検索して別の方法を見つけました(std::string qr_naziv[6];)。

23
Jovica96

さて、C関数はC++構造に精通していません。次のことを行う必要があります。

_...
for(i = 0; i < 6; i++) {
    printf("Input the number for %s =", qr_naziv[i].c_str());
    scanf("%d", &br_el[i]);
}
...
_

各_std::string qr_naziv[i]_でメソッド c_str() の呼び出しに注意してください。これは、ヌル終了文字に_const char *_を返しますstringに保存されているものと同等のデータを持つ配列-Cのような文字列。

Edit:そしてもちろん、C++で作業しているので、最も適切なのは、ストリーム演算子挿入_<<_を使用することです@MatsPeterssonが正式に指摘したように、_>>_を抽出します。あなたの場合、次の変更を行うことができます。

_# include <iostream>
...
for(i = 0; i < 6; i++) {
    std::cout << "Input the number for " << qr_naziv[i] << " =";
    std::cin >> br_el[i];
}
...
_
42
Rubens