我需要从数据库(MariaDB)中检索INT并将其放在用GTK3制作的列表中。
当我尝试将变量从MariaDB传递到GTK3时,编译器会抛出以下错误:
cannot pass objects of non-trivially-copyable type ‘const class mysqlpp::String’ through ‘...’
(这发生在函数void item(string nombre)
,括号内的行,for循环中)
所以,我要感谢任何能告诉我解决这个问题的方法的人。 谢谢你的回答。
代码如下:
void item(string nombre)
{
Connection con;
con.connect("", server, user, pass);
con.select_db(db);
string consulta = nombre;
Query pedido = con.query(consulta);
StoreQueryResult resp = pedido.store();
Row fila;
for (i=0; i<resp.num_rows(); i++)
/*THE PROBLEM IS HERE*/
{
gtk_list_store_append(GTK_LIST_STORE(list_store), &list_iterator);
gtk_list_store_set(GTK_LIST_STORE(list_store), &list_iterator, 0, resp[i][1], 1, resp[i][2], 2, resp[i][1],-1);
}
con.disconnect();
}
答案 0 :(得分:4)
您似乎正在尝试将mysqlpp::String
对象传递给gtk_list_store_set()
。你不能这样做,因为它是一个C函数,不理解C ++对象。 1
而是在字符串对象上调用c_str()
,该对象返回指向以null结尾的字符串的指针。 gtk_list_store_set()
会将指向字符串的值复制到其自己的内部结构中,因此不存在数据所有权问题。
gtk_list_store_set(GTK_LIST_STORE(list_store), &list_iterator,
0, resp[i][1].c_str(),
1, resp[i][2].c_str(),
2, resp[i][1].c_str(),
-1);
1 具体来说,您试图在va_arg
结构中传递C ++对象,这是{C}函数原型中...
所代表的结构。您只能使用所谓的trivially-copyable对象执行此操作,并且mysqlpp::String
个对象不可轻易复制。