我有一个QHash<QString, QVector<float> > qhash
,并尝试覆盖 QVector
中的值如下:
void Coordinate::normalizeHashElements(QHash<QString, QVector<float> > qhash)
{
string a = "Cluster";
float new_value;
float old_value;
const char *b = a.c_str();
float min = getMinHash(qhash);
float max = getMaxHash(qhash);
QHashIterator<QString, QVector<float> > i(qhash);
while (i.hasNext())
{
i.next();
if(i.key().operator !=(b))
{
for(int j = 0; j<i.value().size(); j++)
{
old_value = i.value().at(j);
new_value = (old_value - min)/(max-min)*(0.99-0.01) + 0.01;
i.value().replace(j, new_value);
}
}
}
}
我在 i.value().replace(j, new_value);
上收到错误中风如下:
C:\Qt\latest test\Prototype\Coordinate.cpp:266: error: passing 'const QVector' as 'this' argument of 'void QVector::replace(int, const T&) [with T = float]' discards qualifiers [-fpermissive]
谁能帮我解决这个问题吗?
最佳答案
错误消息告诉您,您正在尝试在 const
实例上使用非 const
方法。在本例中,您尝试在 const QVector
上调用 QVector::replace
。造成这种情况的主要原因是因为您使用的是 QHashIterator,它仅返回 QHashIterator::value()
中的 const
引用。 .
要解决此问题,您可以在 QHash
上使用 STL 样式迭代器而不是 Java 样式迭代器:
QString b("Cluster");
QHash<QString, QVector<float> >::iterator it;
for (it = qhash.begin(); it != qhash.end(); ++it)
{
if (it.key() != b)
{
for (int j=0; i<it.value().size(); j++)
{
old_value = it.value().at(j);
new_value = (old_value-min)/(max-min)*(0.99-0.01) + 0.01;
it.value().replace(j, new_value);
}
}
}
您还可以使用QMutableHashIterator
而不是QHashIterator
。
关于qt - QVectors 的 QHash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18291236/