web-dev-qa-db-fra.com

Erreur] ne peut pas passer des objets de type non-trivialement copiables 'std :: string {aka class std :: basic_string <char>}' through '...'

#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]);
}

Ce programme est beaucoup plus long, donc je l'ai raccourci. Le fait est que je vais entrer des nombres pour le tableau br_el[6], et je veux qu'il me montre pour quel objet j'entre le nombre! Donc, quand j'essaye de le compiler, cela me donne l'erreur: "[Erreur] ne peut pas passer des objets de type non-trivialement copiables 'std :: string {aka class std :: basic_string}' à '...'" J'ai essayé de déclarer string qr_naziv[6]; mais la chaîne n'était même pas en gras, donc cela n'a pas fonctionné, alors j'ai recherché sur google et découvert une autre façon (std::string qr_naziv[6];).

23
Jovica96

Eh bien, les fonctions C ne connaissent pas les structures C++. Vous devez procéder comme suit:

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

Notez l'appel à la méthode c_str() sur chaque std::string qr_naziv[i], Qui renvoie un const char * À un tableau de caractères terminé par null avec des données équivalentes à celles stockées dans la chaîne - une chaîne de type C.

Edit : Et, bien sûr, puisque vous travaillez avec C++, le plus approprié est d'utiliser l'insertion des opérateurs de flux << et l'extraction >>, comme l'a dûment noté @MatsPetersson. Dans votre cas, vous pouvez effectuer la modification suivante:

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