#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];
,但字符串甚至没有加粗,所以它不起作用,所以我用Google搜索并发现了另一种方式(std::string qr_naziv[6];
)。
答案 0 :(得分:39)
嗯,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 *
返回到以空字符结尾的字符数组,其数据与存储在字符串中的数据相同 - 类似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];
}
...