2011-07-12 99 views
0

我有如下定義一個struct答:訪問結構失敗

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) 

錯誤:請求構件在 'R' '的rect',其是非類類型的 'A'

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

錯誤:基地操作數 ' - >' 具有非指針類型'CvRect'

任何想法如何訪問結構CvRect->高度,如果它是在另一個結構內?

謝謝!

+1

你的'聲明A'不包含一個叫做'rect'成員。 – twoflower

回答

5

r是指向`struct A,其包含(非指針)構件B(據說rect?)連接到CvRect。所以你必須寫
r->rect.width

+1

我想你是指'r-> B。寬度' – qbert220

+0

@qbert:從詳細說明錯誤的問題中的代碼示例中,我假設'B'實際上是'rect',所以我選擇了這個名字...... –

1

你結合的方法。例如,r->rect.widthr是一個指針,因此您應該使用->運算符。然而,rect不是指針,因此您使用.

0

在你的例子中,r是一個指針。因此,r直接成員必須通過「 - >」進行訪問,如r->rect

r->rect(這應該是r->B,因爲這就是你把它在你的A)定義是一個對象,而不是一個指針。因此,你會訪問其成員與.所以r->rect.width

0

代碼您發佈不統一進行命名,但我認爲你要像

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

如果r你需要取消對它的引用,以獲得rect成員的指針,但該成員ITSE如果是而不是的指針。

0

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

r->B.width 

如果r是一個指針或

r.B.width 

如果r是一個實例