我正在查詢一個查詢MySQL數據庫的應用程序。創建多個具有相同名稱的類對象? C++
我想這樣做的結果將被存儲在一個圖(其具有相應的一對):
std::map<int, Car*> m_car;
typedef std::pair<int, Car*> m_car_pair;
的汽車對象是由8個參數,其中之一是car_id所以,首先我拉汽車ID並將其用作鑰匙,然後我想將整個汽車對象存儲爲地圖的值。 (我知道這是包裝我要存儲car_id兩次,但目前我不介意)。
反正這裏是我的查詢代碼:
void DatabaseController::getAll(QString query_string)
{
// Console log message
std::cout << "Querying Database" << std::endl;
/// Declare SQL query and pass function parameter 'query'
QSqlQuery query(query_string);
// execute the query
query.exec();
int count = 0;
// While results are coming in
while(query.next())
{
// Call car constructor passing all parameters
Car car(query.value(count).toInt(), query.value(count+1).toString(), query.value(count+2).toString(), query.value(count+3).toString(),
query.value(count+4).toInt(), query.value(count+5).toInt(), query.value(count+6).toInt(), query.value(count+7).toString());
if (car.getcarID() != 0)
{
m_car_records.insert(m_car_pair(car.getcarID(), &car));
}
}
std::cout << "Database query finished" << std::endl;
這個我做了一個快速測試功能遍歷在地圖上,並把所有的ID的(圖鍵),並檢查它們是不同的後(即函數工作)他們是。
但這只是一個檢查,我需要的是能夠從汽車上調用應該在地圖上的汽車對象的附件功能。所以,我用同樣的快速測試功能遍歷地圖和cout << car.toString();
(一個簡單的字符串函數在汽車類)結束:
void DatabaseController::test()
{
m_car_records_iterator = m_car_records.begin();
for(unsigned int i = 0; i < m_car_records.size(); i++)
{
car *test = m_car_records_iterator->second;
std::cout << test->toString() << std::endl;
m_car_records_iterator++;
}
}
這表明結果的正確數量不過他們都是即車相同已添加到地圖中的每個條目的對象是同一
我的問題是(對,是由該查詢找到的最後一個記錄的值)...
有什麼辦法,使用這個結構我目前已經爲我的查詢創建並添加了這些類obj在while循環中使用相同的名字來映射到我的映射,因爲當然我不知道有多少結果被返回併爲每個對象聲明一個類對象,但是因爲它使用相同的名稱,所以只需添加每次都是一樣的,實際上並沒有取代這些值......至少那是我認爲正在發生的事情?
任何意見或想法將
將一個本地堆棧變量'car'的地址重複插入到您的地圖中可能不會達到您想要的。我會從那裏開始。 – WhozCraig