ベクトル配列内のいくつかの要素へのポインターを (基準に基づいて) NULL に設定し、要素ポインターが NULL かどうかを確認したいと考えています。その要素を指すポインターが NULL の場合、ベクター配列からその要素を削除します。
アドレス式は左辺値または関数指定子である必要があり、その理由がわかりません (行の場所はコードでコメントされています)。を使用して値のアドレスを取得している&
ため、その要素を指すポインターが NULL であるかどうかがわかりませんか?
エラーがそこにある可能性があるため、前のコードを含めました。
関連コード:
vector<particle> pl = c.particlelist;
vector<particle> noncollision = c.particlelist;
vector<vector<particle>> collisionlist = new vector<vector<particle>>();
for (int i = 0; i < c.numparticles-1; i++){
particle first = pl[i];
for (int j = i+1; j < c.numparticles; j++)
{
particle second = pl[j];
double d = distance(first, second);
if (d==0)
{
vector<particle> temp = {pl[i], pl[j]};
collisionlist.push_back(temp);
noncollision[i].setxposint(NULL);
noncollision[j].setxposint(NULL);
}
else
{
}
}
}
int j = 0;
for (int i = 0; i < noncollision.size(); i++)
{
if (&(noncollision[i].getxpos()) == NULL) ////// ERROR HERE
{
noncollision.erase(noncollision.begin()+i);
}
else
{
j++;
}
}
私は C++ を初めて使用します。これを行うためのよりエレガントな方法または修正方法を提案できれば、非常にありがたいです。また、要素へのポインターを設定する方法noncollision[i].setxposint(NULL);
は正しいと思いますか? 関数を使用して整数を返し、アドレスを取得できますか?
getxpos および setxposint の関数:
int particle::getxpos(){
return xpos;
}
void particle::setxposint(int b){
xpos = b;
}