ベクトルに少し問題があります。私が理解していることからpush_back()
、引数をコピーし、そのコピーをベクターに挿入します。
struct BridgeData
{
string name;
string type;
};
私のような単純な集約クラスの場合、オブジェクトのコピーは両方のフィールドをコピーして作成する必要があります。
for ( int i = 0; i<len; i++)
{
BridgeData data = {grp.get(1+i).asString().c_str()};
v.push_back(data);
cout << v[i].name << endl;
}
とvector<BridgeData> &v
。
を印刷するdata.name
と、ブレース付きリストで使用した値が取得されますが、印刷v[i].name
するとフィールドが空のように見えます...そのような集約クラスのデフォルトのコピー「コンストラクター」は、デフォルトですべてのフィールドを初期化しますか?
編集:
それが十分でない場合は、ここにさらにコードがあります。データ メンバーとして を含むクラスがありますvector<BridgeData> yarpGroups
。次に、同じクラスのメソッドの本体で参照として渡しますreadBridgeDataVector(bGeneral,"yarpgroups",yarpGroups,numberOfYarpGroups);
。他の引数は無関係なので無視してください (私はそう確信しています)。以前に切り取られたのは、この関数からのものです:
void readBridgeDataVector(Bottle &rf, string name, vector<BridgeData> &v, int len)
{
v.resize(len);
if(rf.check(name.c_str()))
{
Bottle &grp = rf.findGroup(name.c_str());
for ( int i = 0; i<len; i++)
{
BridgeData data = {grp.get(1+i).asString().c_str(),"float"};
v.push_back(data);
cout << v[0].name << endl;
}
}
else
{
cout << "Could not find parameters for " << name << ". "
<< "Setting everything to null by default" << endl;
}
}