關於vector的const問題


我在使用QVector的時候(QT的內容,好象和STL的vector一樣的),一旦對QVector中的內容進行了初始化,就無法改變

QVector<QGrid3d> grids;

在應用時,會出現如下的錯誤:

error C2662: 'QVector<T>::append' : cannot convert 'this' pointer from 'const QVector<T>' to 'QVector<T> &'

error C3892: 'gridID' : you cannot assign to a variable that is const

請問如何解決這個問題呢?  因為我必須對已經初始化的QVector其中的內容進行改變.

15 个解决方案

#1


你光貼這個看不出來啥,你最好弄一個能出現這種錯誤的代碼貼出來.

#2


多貼點代碼

#3


信息太少,LZ貼下錯誤代碼吧.

#4


信息太少,LZ貼下錯誤代碼吧.

#5


QT的內容,好象和STL的vector一樣的.樓主問題都出達應該不一樣吧!

#6


類型不匹配問題吧,樓主把代碼貼出來看看

#7


容器定義成const有意義嗎?是不是函數參數里有const qvector<T>&類型?

#8


有QVector?
QT4里加的吧?先把你用到QVector的代碼發出來看看..

#9



class QGrid3d : public QBBox3d
{
public:
//publid Datas
long int GridID; 
QVector<int> includeGroupID; 
QVector<int> includeFaceID; 
bool includeFaces; 
QVertex3d center; 
};

//下面是第一次用到,沒問題
void QScene::InitGrids()
{
CalStepNum();
QGrid3d curGrid;
int i,j,k,currentID;
int steps = pow(2.0,stepNum);
QVertex3d orginalPoint = sceneBox.pMin;

float xDirStep = (sceneBox.pMax.x - sceneBox.pMin.x)/(float)steps;
float yDirStep = (sceneBox.pMax.y - sceneBox.pMin.y)/(float)steps;
float zDirStep = (sceneBox.pMax.z - sceneBox.pMin.z)/(float)steps;

QVertex3d orginalCenterpoint = QVertex3d(orginalPoint.x+xDirStep/2.0, orginalPoint.y+yDirStep/2.0, orginalPoint.z+zDirStep/2.0);

for (i=0; i<steps; i++)
for(j=0; j<steps; j++)
for (k=0; k<steps; k++)
{
currentID = i*steps*steps + j*steps +k;
curGrid.GridID = currentID;
curGrid.includeFaces = false;
curGrid.center = QVertex3d(orginalCenterpoint.x+xDirStep*i,
                       orginalCenterpoint.y+yDirStep*j,
   orginalCenterpoint.z+zDirStep*k);
}
}

//下面是對它進行了修改,就出現了題目中的錯誤
void QScene::PutFacesintoGrid()
{
QGroup3d curGroup;
QFace3d curFace;
long int gridID;
CalDivValues(sceneBox.pMin.x, sceneBox.pMax.x, stepNum, xdivValue);
CalDivValues(sceneBox.pMin.y, sceneBox.pMax.y, stepNum, ydivValue);
CalDivValues(sceneBox.pMin.z, sceneBox.pMax.z, stepNum, zdivValue);
for (int i=0; i<numgroups; i++)
{
curGroup = groups.at(i);
for (int j =0; j<curGroup.numfaces; j++)
{
curFace = curGroup.m_ArrayFace[j];
CalGridID(curFace.faceCenter, gridID);
grids.at(gridID).includeGroupID.append(i);
grids.at(gridID).includeFaceID.append(j);
grids.at(gridID).includeFaces = true;
}
}
}

#10


會是因為這個么?
const T & QVector::at ( int i ) const

#11


引用 10 樓 degree_37 的回復:
會是因為這個么? 
const T & QVector::at ( int i ) const


就是這個.at返回的內容是不可更改的

#12


引用 11 樓 akirya 的回復:
就是這個.at返回的內容是不可更改的


那我怎么修改它,讓它達到可以更改的呢? 用const_cast? 不過具體如何用呢? 我之前也嘗試過 不過還是出錯...

#13


用這種迭帶器技術
advance(i,distance<ConstIter>(i,ci));

#14


不明白的話看http://www.stlchina.org/download/Eff_STL_CN.pdf條款27

#15


const修飾的變量不能被修改的

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com