2010-04-21 66 views
0

對不起,令人困惑的標題,但它基本上說明了一切。下面是我使用的結構(在OpenCV中找到):通過價值傳遞結構,以其他結構作爲其成員之一,更改此成員的成員的值

struct CV_EXPORTS CvRTParams : public CvDTreeParams 
{ 
    bool calc_var_importance; 
    int nactive_vars; 
    CvTermCriteria term_crit; 

    CvRTParams() : CvDTreeParams(5, 10, 0, false, 10, 0, false, false, 0), 
     calc_var_importance(false), nactive_vars(0) 
    { 
     term_crit = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 50, 0.1); 
    } 
} 

typedef struct CvTermCriteria 
{ 
    int type; 
    int max_iter; 
    double epsilon; 
} 
CvTermCriteria; 

CV_INLINE CvTermCriteria cvTermCriteria(int type, int max_iter, double epsilon) 
{ 
    CvTermCriteria t; 

    t.type = type; 
    t.max_iter = max_iter; 
    t.epsilon = (float)epsilon; 

    return t; 
} 

現在,我初始化CvRTParams結構和設定值其成員:

CvRTParams params; 
params.max_depth = 8; 
params.min_sample_count = 10; 
params.regression_accuracy = 0; 
params.use_surrogates = false; 
params.max_categories = 10; 
params.priors = priors; 
params.calc_var_importance = true; 
params.nactive_vars = 9; 
params.term_crit.max_iter = 33; 
params.term_crit.epsilon = 0.1; 
params.term_crit.type = 3; 

然後調用一個對象的功能,以params作爲參數:

CvRTrees* rt = new CvRTrees; 
rt->train(t, CV_ROW_SAMPLE, r, 0, 0, var_type, 0, params); 

現在會發生什麼? ...

params.term_crit.max_iter 
params.term_crit.epsilon 
params.term_crit.type 

已經改變了!它們不再是33,0.1和3,而是沿着3,7.05541e-313和4的線條,並且這對於CvRtrees :: train()函數的整個持續時間...

回答

0

By我寫完這個問題的時候我找到了答案。所以我想我會發帖無論如何,如果有人遇到同樣的問題。代碼本身沒有錯(至少,它並不完全錯誤)。但是我在ppc處理器(G5)上使用MacOS X和apple-gcc。我正在使用-fast標誌進行優化。 刪除-fast標誌(僅保留-O3)解決了該問題。

+0

你可以關閉該文章嗎? – 2010-04-21 19:21:22

+0

如果通過點擊支票圖標將其變綠,我只能在兩天內這樣做(因爲我回答了我自己的問題,我想)。 – 2010-04-21 20:26:34

+0

提醒已經兩天了 - 請關閉問題。 – 2010-04-25 01:45:41