[C] erreur de compilation

Fermé
foobar47 - 29 avril 2003 à 17:54
 foobar47 - 30 avril 2003 à 15:16
Bonjour,
je viens de compiler mon prog en language C et voilà ce qu'il me dit:

Illegal use of type name 'USHORT'.
Type error: pointer expected.
Operands of = have illegal types 'pointer to USHORT' and 'int'.



Voici ou ce situe le problème:


*******----------mon code---------**********
...
int FUNCTIONFLAGS cviTriggerReadEx(int const nBase, long const lTime, int const nUnitType, USHORT* pArray);
...
int nPixelNo = 2086;
long lIntTime=11;
USHORT *PixArray;
...
PixArray = new USHORT[nPixelNo]; <--
/*de ce fait, je ne peux utiliser la fonction suivante :( */
cviTriggerReadEx(0x300, lIntTime, 0,PixArray);

En éspèrant que qulqu'un va me répondre...
Merci :)

10 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
29 avril 2003 à 18:02
Hi,
new c'est un mot réservé C++ non?

Utilise malloc....
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
0
pas la peine de souligner langage c, surtout quand c en est pas.
USHORT: c est pas du C
nUnit: c est pas du C
new: c est pas du C

win++ stroke back!
0
Ok, merci pour les réponses ;))
Mais alors, vu que je n'y connais strictement rien en C++, quels sont les équivalents de USHORT, nUnit et new en language C ?
Ou si vous ne savez pas, à quoi ils correspondent ?
Merci d'avance.
0
Oups, new = malloc je suppose !
merci à jisisv :))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ariock Messages postés 125 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 31 janvier 2005 5
30 avril 2003 à 09:20
USHORT, c'est "unsigned short" et je ne sais pas ou pouet a vu nUnit

Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
0
>je ne ne sais pas ou pouet a vu nUnit
pouet non plus :)
0
Merci bien ariock,
ça m'est très utile.
Mais en revanche, nUnit ne cause pas de problème est n'est à priori pas un mot résèrvé C++... :!
Bref, encore merci.
:))
0
Salut foobar47,

C'est claire "new" c'est en C++. En ce qui concerne "'USHORT", c'est un type defini dans ton soft, exemple :

typedef USHORT unsigned short;

Donc dans ton soft au lieu d'utiliser "unsigned short", tu utilises 'USHORT", de meme si tu en a assez de taper "unsigned char" dans ton code tu peux definir :

typedef UCHAR unsigned char;

voila ... donc je pense que "USHORT" est defini dans un fichier *.H, recherche "USHORT" sur ton disque dans les fichiers *.C ou *.CPP (parce qu'en fait ca ressemble plus a du C++ que du C, c'est claire !

A toi de jouer ...
0
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
30 avril 2003 à 10:25
Tu devrais ptete commencer par vérifier et nous dire si ton compilo est un compilo C ou C++... Ca serait pas mal que toi aussi tu saches en quel langage (et pas language, ça c'est la version anglaise ;-) )tu développes, non ?

@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
En ce qui concerne "new", malloc est un équivalent un peu particulier car tu ne doit pas oublier de liberer la mémoire lorque tu as fini de l'utiliser en faisant un "free".
De plus pour utiliser malloc il faut lui spécifier la taille de l'espace mémoire a réservé, par exemple :
malloc(sizeof(USHORT)); /*dans le cas ou USHORT est bien un typedef*/

Aller ciao!
0
Salut,
merci pour vos réponses,
en effet, la source que j'ai récuperée est en C++, de plus elle faisait appel à une DLL.
Pour faire appel à une DLL, en C, savez comment proceder? car je l'ai fait, mais je ne suis pas sur de mon coups :

#define DLLIMPORT extern "C" __declspec(dllimport)
#define FUNCTIONFLAGS __stdcall
int FUNCTIONFLAGS cviTestCard(short nDeviceNumber, short nBoardType, short nGain);
int FUNCTIONFLAGS cviSetIntEx(int const nBase, int const nPixelNumber, long const lTime, int nDeviceNumber, int nChannel, int nGain);
int FUNCTIONFLAGS cviSetInt(int const nTriggerMode, long const lTime);

mon compilateur me renvoie une erreur du type:
Redefinition de la macro DLLIMPORT

En ce qui le concerne, mon compilateur, c'est le compilateur integré au logiciel LabWindows, pour ceux qui connaissent, et à priori, il ne gère que le C.

Pour le new, je l'ai remplacé par malloc:

PixArray =(unsigned short*) malloc(nPixelNo * sizeof(int*)); en C
à la place de :
PixArray = new USHORT[nPixelNo] en C++

j'ai pris soin de liberer la mémoire comme ceci:
free(PixArray);
qui remplace le delete.

Cependant, j'ai l'erreur suivante lors de l'execution:

Pointer arithmetic involving pointer to freed memory

Si vous avez des idées ou des éléments de réponses, merci.
Merci encore pour vos réponses.

Linux is like sex, it's better when it's free.
C'est ceux qui s'en servent pas qui en disent du mal.
0