我正在查询一个查询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