Подтвердить что ты не робот

Ошибка] не может передавать объекты нетривиально-скопируемого типа '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];, но строка не была выделена жирным шрифтом, поэтому она не работала, поэтому я googled и узнал другой способ (std::string qr_naziv[6];).

4b9b3361

Ответ 1

Ну, функции 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-подобная строка.

Edit: И, конечно же, поскольку вы работаете с С++, наиболее подходящим является использование вставки операторов потока << и извлечения >>, как должным образом отмечено @MatsPetersson. В вашем случае вы можете сделать следующее изменение:

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