无法传递非平凡可复制类型'const class mysqlpp :: String'的对象

时间:2014-10-28 01:23:38

标签: c++ mysql variables type-conversion gtk3

我需要从数据库(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();
}

1 个答案:

答案 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个对象不可轻易复制。