2011-07-12 26 views
0

は、私は次のように定義されたstruct A持って失敗します。アクセス構造体が

typedef struct A 
{ 
    CvRect B; // rect 
    int C; 
    double D; 
} 
A; 

...私のメインプログラムで

を、私はアイテムのシーケンスの一つの項目をつかむ:

A *r = (A*) cvGetSeqElem(X, i); 

私はRECTにアクセスしようとするたびに、私は次のいずれかのエラーを取得:

if (r.rect.width>100 && r.rect.height>100) 

エラー:非クラスタイプ「」

又は

if (r->rect->width>100 && r->rect->height>100) 

誤差である「R」のメンバ「四角形」、要求:のベースオペランド「 - >」が非有しますポインタ型 'CvRect'

構造体CvRect-> heightが他の構造体の中にある場合、その構造体にアクセスする方法はありますか?

ありがとうございます!

+1

'A'が' rect'と呼ばれる部材が含まれていないのあなたの宣言である場合、Rは、ポインタまたは

r.B.width 

ある場合。 – twoflower

答えて

5

rCvRectに(非ポインタ)部材B(おそらくrect?)を含有`struct Aへのポインタです。あなたは書く必要があります
r->rect.width

+1

私はあなたが 'r-> B 'を意味すると思います。width ' – qbert220

+0

@ qbert:エラーの詳細を記述したコード例から、 'B'が実際に' rect'だったと仮定して、その名前を選択しました... –

1

あなたはアプローチを組み合わせます。例えば、r->rect.widthである。 rはポインタなので、->演算子を使用する必要があります。 rectしかし、ポインタではないので、.を使用します。

0

この例では、がポインタです。したがってのメンバーのrには、「 - >」を使用してアクセスする必要があります(r->rect)。

r->rectそれはあなたがA)のあなたの定義でそれを呼んだことはそのため、あなたは.のでr->rect.widthと、そのメンバーにアクセスします。オブジェクト、ではないポインタであるので、(これは、r->Bでなければなりません。

0

コードあなたは一貫して命名されていない掲載しましたが、私は、rは、あなたがrectメンバーを得るためにそれを間接参照する必要があるポインタがある場合は、

if (r->rect.width>100 && r->rect.height>100) 

ような何かをしたいと思うが、そのメンバーitse lfはではなく、のポインタです。

0

Any idea how to access the struct CvRect->height if it is inside another struct?

r->B.width 

Rインスタンス