作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从数据库 (MariaDB) 中检索一个 INT 并将其放入使用 GTK3 制作的列表中。
当我尝试将变量从 MariaDB 传递到 GTK3 时,编译器抛出以下错误:
无法通过“...”传递不可平凡复制类型“const class mysqlpp::String”的对象
(这发生在函数 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();
}
最佳答案
看起来您正在尝试将 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 中表示的内容函数原型(prototype)。您只能使用所谓的 trivially-copyable 来执行此操作对象和 mysqlpp::String
对象不可简单复制。
关于c++ - 无法传递不可平凡复制类型的对象 ‘const class mysqlpp::String’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26599479/
我是一名优秀的程序员,十分优秀!