|
|
|
|
Bonjour,
J'ai un probleme de conversion float, double, voila la partie du programme concerné:
float *rd, float*rq;
double** dataIn;
double* queryIn;
dataIn= new double*[nbkp_d];
for(int i=0; i<nbkp_d; i++)
dataIn[i] = new double[dimvect_d];
for(int j = 0; j < nbkp_d; j++) {
for(int i = 0; i < dimvect_d; i++)
dataIn[j][i] = rd[i+j*dimvect_d]; ///n'affiche pas de message d'erreur, c bien
}
queryIn = new double[dimvect];
for(int j = 0; j < nbkp; j++)
queryIn = rq[j*dimvect];
///ici j'ai un message d'erreur:
error C2440: '=' : impossible de convertir de 'float' en 'double *'
J'ai essayer le cast:
for(int j = 0; j < nbkp; j++)
queryIn = (double)rq[j*dimvect];
///ici encore le message d'erreur:
error C2440: '=' : impossible de convertir de 'double' en 'double *'
J'ai essayé
for(int j = 0; j < nbkp; j++)
queryIn = (double*)rq[j*dimvect];
J'ai le message d'erreur:
error C2440: 'cast de type' : impossible de convertir de 'float' en 'double *'
J'ai regardé un peu dans les forums mais je n'ai rien trouvé....
quelqu'un de vous aurez une idee de comment resoudre ça???
Merci
PS : le probleme c'est que JE NE PEUX PAS declarer "rq" et "rd" comme double
et JE NE PEUX PAS declarer "dataIn" et "queryIn" comme float
Configuration: Windows Vista Internet Explorer 7.0
T'avais raison, ce n'est pas la seul erreur...
|
DataPts = (ANNpointArray)dataIn;
|
Parce qu'on ne sait pas ce qu'il y a dans ANNpointArray !!!
|
En regardant (très très) rapidement le manuel il semble qu'ils expliquent le système de numération de ANN au chapitre 2.2 (page 13)
|
Effectivement voila ce que j'ai fait (si c juste et c ce que tu voulais dire :-) )
|
Pourquoi vouloir absolument utiliser les pointeurs, alors que ta librairie fournit déjà un type tableau ?
ANNdistArray queryIn=new ANNdist[dim];
ANNdistArray dataIn=new ANNdist[nbkp][dimvect];
for(int j=0; j<nbkp; j++)
for(int i=0; i<dimvect; i++)
dataIn[j][i]=rd[i+j*dimvect];
for(int j=np; j<nbkp; j++)
{
for(int i=0; i<dimvect; i++)
queryIn[i]=rq[i+j*dimvect];
kdTree = new ANNkd_tree(datatest,nPts,dim);
kdTree->annkSearch(queryIn,k,nnIdx,dists,eps);
disttoneigh.push_back(sqrt(dists[0]));
indexdata.push_back((int)nnIdx[0]);
}PS. Quand tu écris du code utilises les ballises "< code >" et "< / code >" (sans les espaces bien sûr)
La confiance n'exclut pas le contrôle |
Je travail avec les pointeurs, parceque pour lire l'input, il faut passer par la fonction predefinie:
if(!LMECB_GetMatrix(1, &l1, &l2, &rd, NULL))
return 0;
nbkp = l1;
dimvect = l2;
dataIn =new ANNdist*[nbkp];
for(int i=0; i<nbkp; i++)
dataIn[i] = new ANNdist[dimvect];
for(int j = 0; j < nbkp; j++) {
for(int i = 0; i < dimvect; i++)
dataIn[j][i] = rd[i+j*dimvect]; //////(ligne A)
}
et rd, le parametre 4 de cette fonction est un pointeur de type: lme_float64 *rd; donc pour l'affectation: datatest[j][i] = rd[i+j*dimvect_d]; //// (ligne B) il faut que "dataIn" soit un pointeur. sinon declarer dataIn comme ça: ANNdistArray dataIn=new ANNdist[nbkp][dimvect]; il y les erreures: //// pour la (ligne B) 1>c:\...\annkp.cpp(35) : error C2440: '=' : impossible de convertir de 'ANNdist (*)[dimvect]' en 'ANNdistArray' /// (pour la ligne A) 1>c:\...\annkp.cpp(38) : error C2109: un indice requiert un type tableau ou pointeur /// lors de la construction de l'arbre de recherche 1>c:\...\annkp.cpp(53) : error C2664: 'ANNkd_tree::ANNkd_tree(int,int,int)' : impossible de convertir le paramètre 1 de 'ANNdistArray' en 'int' pour: Char Snipeur
For(int i = 0; i < dimvect; i++){
queryIn[i] = rq[i+np*dimvect];
}
il me semble que c juste a chaque iterarion np: queryIn prends les valeurs d'une ligne de rq.
|
À chaque fois que tu vas avoir une erreur de corrigée tu en auras une autre qui arrive, et le problème c'est qu'on a pas une vision d'ensemble du code, on ne peux pas te proposer une solution miracle...
|
La faute etait que avant la création de l'arbre il faillais specifier le nombre de points de datatest
|