错误]无法通过'...'传递非平凡可复制类型'std :: string {aka class std :: basic_string <char>}'的对象

Jov*_*a96 23 c++ arrays string numbers

#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]);
}
Run Code Online (Sandbox Code Playgroud)

这个程序要长得多,所以我把它缩短了......事情是,我会为数组输入数字br_el[6],我希望它能告诉我输入数字的对象!因此,当我尝试编译时,它给出了错误:"[错误]无法传递非平凡可复制类型的对象'std :: string {aka class std :: basic_string}'通过'...'"我试图声明string qr_naziv[6];但字符串甚至没有加粗,所以它不起作用,所以我用Google搜索并发现另一种方式(std::string qr_naziv[6];).

Rub*_*ens 43

好吧,C函数不熟悉C++结构.您应该执行以下操作:

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

注意c_str()对each上的方法的调用std::string qr_naziv[i],它返回一个const char *以null结尾的字符数组,其数据与存储在字符串中的数据相同 - 类似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];
}
...
Run Code Online (Sandbox Code Playgroud)

  • 或者,使用`cin >>`和`cout <<`样式C++构造,而不是C样式代码. (2认同)