0

C++ と混同してvectorおり、助けを求めています。クラスを宣言しCBoundaryPointます:

class CBoundaryPoint:
{
public:
    double m_param;
    int m_index;    
}

そして、次を定義しますvector

vector<CBoundaryPoint> vBoundPoints;
CBoundaryPoint bp;
double param;
// other codes
bp.m_param = param;
vBoundPoints.push_back( bp );

のすべての要素についてvBoundPoints、 の値が指定された値パラメーターとm_paramはまったく異なることに驚きました。理由はわかりません。

例えば:

param = 0.3356;
bp.m_param = param; // so bp.param equals to 0.3356;
vBoundPoints.push_back( bp ); // while (*(vBoundPoints.end()-1)).m_param = -6.22774385622041925e+066;  same case to other elements

それで、何が起こったのですか?私はVS2010を使用しています。

4

1 に答える 1

1

size_typeベクターのサイズを変更したり、コンストラクターを使用して特定のサイズのベクターを作成したりすると、おそらくガベージが発生します。ベクトルでデフォルトで構築されたオブジェクトを取得し、これらにはプリミティブ型が含まれています。ユーザー定義のデフォルト コンストラクタがないため、値は基本的にランダム、つまり「ガベージ」です。

クラスにデフォルトのコンストラクターを追加することで、これを修正できます。

class CBoundaryPoint:
{
public:
    CBoundaryPoint : m_param(), m_index() {} // initializes members to 0. and 0
    double m_param;
    int m_index;    
}
于 2012-08-02T14:41:36.647 に答える