Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++,从数据库结果创建结构_C++_Mysql_Windows - Fatal编程技术网

C++,从数据库结果创建结构

C++,从数据库结果创建结构,c++,mysql,windows,C++,Mysql,Windows,我正在尝试从数据库结果创建结构。做这件事的简单方法是什么? 我想得到这样的结果:这是一个不起作用的小例子。我放这个是为了让一切都清楚 struct ROWSTRUCTURE { int ID; std::string test; }; enum ROWSTRUCTURE_FIELD_ENUM_end { ROWSTRUCTURE_FIELD_ENUM_ID, ROWSTRUCTURE_FIELD_ENUM_test, ROWSTRUCTURE_FIELD

我正在尝试从数据库结果创建结构。做这件事的简单方法是什么? 我想得到这样的结果:这是一个不起作用的小例子。我放这个是为了让一切都清楚

struct ROWSTRUCTURE
{
    int ID;
    std::string test;
};

enum ROWSTRUCTURE_FIELD_ENUM_end
{
    ROWSTRUCTURE_FIELD_ENUM_ID,
    ROWSTRUCTURE_FIELD_ENUM_test,
    ROWSTRUCTURE_FIELD_ENUM_end
};

list<ROWSTRUCTURE> getData()
{
    MYSQL_ROW row; 
    MYSQL_RES *res_set;

    mysql_query(connect,"SELECT * FROM `example`;");
    res_set = mysql_store_result(connect);

    while ((row = mysql_fetch_row(res_set)) != NULL)
    {
        ROWSTRUCTURE StructToAdd;

        for( int i = 0; i < ROWSTRUCTURE_FIELD_ENUM_end; i++)
            StructToAdd[i] = row[i]; //ERROR
    }

    delete res_set;
}

如何以正确的方式执行此操作

您要查找的是一种称为反射的东西,其中变量名称、成员字段等可用于引用实际的变量/字段或任何内容。C++不支持这个。你需要用其他方法来解决这个问题。。。一个可行的解决方案是:

StructToAdd.ID = strtol(row[ROWSTRUCTURE_FIELD_ENUM_ID]);
StructToAdd.test = row[ROWSTRUCTURE_FIELD_ENUM_test];
或者,正如评论所暗示的那样:

struct ROWSTRUCTURE
{
    int ID;
    std::string test;
    ROWSTRUCTURE operator=(const MYSQL_ROW &row)
    {
        ID = strtol(row[ROWSTRUCTURE_FIELD_ENUM_ID]);
        test = row[ROWSTRUCTURE_FIELD_ENUM_test];
        return *this;
    }
};
然后在主功能中:

StructToAdd = row;

在执行任何转换需要执行的操作时,逐个指定字段?不太确定要在此处执行什么操作。ID和测试应该包含什么?@永远我想在最后返回这些东西的列表。我没有做那个零件。@Joachim Pileborg我想做那个过程automatically@Ordo你不能自动完成这个过程。您可以在类中为MYSQL\u行重载operator=并在其中分配字段。