[C] erreur de compilation

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    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.
    1. 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!
      1. 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.
        1. 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.
          1. >je ne ne sais pas ou pouet a vu nUnit
            pouet non plus :)
        2. 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.
          :))
          1. 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 ...
            1. 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 ?
              1. 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!
                1. 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.