1. ホーム
  2. c++

[解決済み] エラー] 自明なコピーでない型 'std::string {aka class std::basic_string<char>}' のオブジェクトを '...' を通して渡すことができない。

2022-03-01 08:45:15

質問

#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] そして、どのオブジェクトに対して数値を入力しているのかを表示させたいのです! そこで、コンパイルしようとすると、"[Error] cannot pass objects of non-trivially-copyable type 'std::string {aka class std::basic_string}' through '...'" というエラーが出ます。 を宣言しようとしたのですが string qr_naziv[6]; が、文字列が太くもならないのでうまくいかず、ググってみたら別の方法( std::string qr_naziv[6]; ).

解決方法は?

さて、Cの関数はC++の構造体を知らないのです。次のようにしてください。

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

メソッドの呼び出しに注目してください。 c_str() を、それぞれの std::string qr_naziv[i] を返すが、これは const char * に格納されているのと同じデータを持つヌル文字'終端の文字配列に変換します。 -- C言語のような文字列。

編集 : そしてもちろん、C++で作業しているので、最も適切なのはストリーム演算子による挿入です << と抽出 >> というのは、@MatsPetersson がきちんと指摘しているとおりです。あなたの場合、以下のように修正することができます。

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