PDA

View Full Version : [C++] int* ptrdiff_t*


fdf86
12-06-2012, 13:02
Salve a tutti!!
Ho un problema con una libreria opensource (robotvision).
Compilandola mi da questo errore in più righe:

cannot convert ‘int*’ to ‘ptrdiff_t*

ho letto un po' su internet ed ho scoperto che è un problema legato ai sistemi a 64bit.
Ho quindi "risolto" sostituendo i vari int* con long*

la compilazione va a buon fine ma non funziona nessuna delle demo.
Volevo sapere se secondo voi può dipendere dalla mia soluzione (o se comunque ce n'è una più consigliabile) perchè per ora non saprei cosa modificare per far girare la demo.
Grazie in anticipo!
Francesco

[Kendall]
12-06-2012, 16:30
Salve a tutti!!
Ho un problema con una libreria opensource (robotvision).
Compilandola mi da questo errore in più righe:

cannot convert ‘int*’ to ‘ptrdiff_t*

ho letto un po' su internet ed ho scoperto che è un problema legato ai sistemi a 64bit.
Ho quindi "risolto" sostituendo i vari int* con long*

la compilazione va a buon fine ma non funziona nessuna delle demo.
Volevo sapere se secondo voi può dipendere dalla mia soluzione (o se comunque ce n'è una più consigliabile) perchè per ora non saprei cosa modificare per far girare la demo.
Grazie in anticipo!
Francesco

Dovresti farci vedere come lo utilizzi, perchè detta così è difficile darti una risposta.
Per la cronaca, il ptrdiff_t è un tipo che trovi nella libreria "cstddef", e rappresenta la differenza tra due puntatori pertanto ha la forma di un tipo integrale (occhio quindi che si entra in un terreno abbastanza scottante del c/c++, in quanto l'algebra dei puntatori ha senso in determinate e ben precise circostanze).

Il mio consiglio quindi è quello di postare innanzitutto il listato incriminato.

fdf86
13-06-2012, 13:05
Grazie per la risposta..
Dato che non ho scritto io il codice e non posso perderci troppo tempo per spulciarlo (tra l'altro sono un ing. meccanico io) speravo bastasse quell'indicazione :) comunque riporto la parte di codice che mi da errore

Questa è l'originale:

sparse_matrix.i = (int*)malloc(sizeof(int)*sparse_matrix.nzmax);
....

int * p_i = sparse_matrix.i;



E questa è la mia correzione:


sparse_matrix.i = (long*)malloc(sizeof(int)*sparse_matrix.nzmax);
...
long * p_i = sparse_matrix.i;


e altri simili..
L'intero file è sparse_matrix.h, reperibile in questa cartella insieme a tutto il resto.
L'unica cosa che mi pare una dichiarazione per sparsematrix è


private:
#ifdef RV_SUITESPARSE_SUPPORT
cholmod_sparse * data;
#else
cs sparse_matrix;
#endif


dove

unsigned short cs

ma mi pare strano e niente di più facile che mi sbagli...

pomeriggio guardo meglio se riesco a trovare qualche riferimento esterno (utilizza CSparse, magari la definizione di sparse_matrix è là dentro :/ )

Forse può esser utile sapere che l'errore che mi riporta lanciando la demo è "Segmentation fault"; anche questo può dipendere dalla versione del sistema operativo a 64 bit?