C++ 无法传递非普通可复制类型“const class mysqlpp::String”的对象

C++ 无法传递非普通可复制类型“const class mysqlpp::String”的对象,c++,mysql,variables,type-conversion,gtk3,C++,Mysql,Variables,Type Conversion,Gtk3,我需要从数据库中检索一个INT,并将其放入使用GTK3制作的列表中 当我尝试将变量从MariaDB传递到GTK3时,编译器抛出以下错误: 无法通过“…”传递非平凡可复制类型“const class mysqlpp::String”的对象 这发生在函数void itemstring nombre中,在for循环中括号内的行中 所以,我要感谢任何能告诉我解决这个问题的方法的人。 谢谢你的回答 代码如下所示: void item(string nombre) { Connection con;

我需要从数据库中检索一个INT,并将其放入使用GTK3制作的列表中

当我尝试将变量从MariaDB传递到GTK3时,编译器抛出以下错误:

无法通过“…”传递非平凡可复制类型“const class mysqlpp::String”的对象 这发生在函数void itemstring 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_集。你不能这样做,因为它是C函数,不理解C++对象。1 相反,在string对象上调用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,具体地说,你试图在VAYARG结构中传递C++对象,这是…在C函数原型中表示。您只能对所谓的对象执行此操作,而mysqlpp::String对象并不是简单的可复制对象。

看起来您正试图将mysqlpp::String对象传递给gtk_list_store_set。你不能这样做,因为它是C函数,不理解C++对象。1 相反,在string对象上调用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,具体地说,你试图在VAYARG结构中传递C++对象,这是…在C函数原型中表示。您只能对所谓的对象执行此操作,而mysqlpp::String对象不是简单的可复制对象。

第70行是哪一行?我知道它在那里,但您真的希望我们从源文件的顶部数第70行吗?通常在出现错误的行上添加注释,这样我们就不必自己查找它了。@cdhowie-Its-in-void-itemstring-nombre-Its-in-void-i=0的括号内;i70和71是该部分括号内的行在使用SOF一段时间后,现在我对它的工作方式更熟悉了,所以我修改了问题以使其更清楚。哪一行是第70行?我知道它在那里,但你真的希望我们从源文件的顶部数第70行吗?通常在出现错误的行上添加注释,这样我们就不必自己查找它了。@cdhowie-Its-in-void-itemstring-nombre-Its-in-void-i=0的括号内;i70和71是该部分括号内的线条在使用SOF一段时间后,现在我对它的工作方式更熟悉了,所以我更改了问题以使其更清楚。非常感谢,我已经被这个问题困扰了一段时间。我将不得不寻找这个,因为我是一个新手,所有这一切,但现在它的工作:非常感谢,我已经有一段时间了。我将不得不寻找这个,因为我是一个新手与所有这些,但现在它的工作: