Désolé pour le titre déroutant, mais il dit essentiellement tout. Voici les structures que je utilise (dans OpenCV):Passer une structure par valeur, avec une autre structure comme l'un de ses membres, change les valeurs des membres de ce membre
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);
}
}
et
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;
}
Maintenant, j'initialiser une structure CvRTParams
et les valeurs définies pour ses membres:
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;
Ensuite, appeler une fonction d'un objet, en prenant comme paramètre params
:
CvRTrees* rt = new CvRTrees;
rt->train(t, CV_ROW_SAMPLE, r, 0, 0, var_type, 0, params);
Que se passe-t-il maintenant? Les valeurs de ...
params.term_crit.max_iter
params.term_crit.epsilon
params.term_crit.type
ont changé! Ils ne sont plus 33, 0.1 et 3, mais quelque chose comme 3, 7.05541e-313 et 4, et ce, pour toute la durée de la fonction CvRtrees :: train() ...
Pouvez-vous fermer le poste? –
Si c'est fait en cliquant sur l'icône de cocher pour le rendre vert, je ne peux le faire en deux jours (parce que j'ai répondu à ma propre question, je suppose). –
rappel qu'il a été deux jours - s'il vous plaît fermer la question. –