2013-04-17 109 views
0

我試圖從數據庫結果創建結構。什麼是一個簡單的方法來做到這一點? 我想是這樣的:(這是一個小的例子不工作,我把這個讓一切清晰。)C++,從數據庫結果創建結構

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; 
} 

我怎樣才能做到這一點以正確的方式?

+0

一個一個地分配字段(在做任何需要轉換的情況下)? –

+0

不太確定你想在這裏做什麼。什麼是'ID'和'test'應該包含? –

+0

@ForEveR我想最後返回這些東西的列表。我沒有做那部分飛機。 – Ordo

回答

0

你在找什麼叫做「反射」,其中變量的名稱,成員字段等可以用來指代實際變量/字段或其他。 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;