Forum Programmation.c++ erreur surement de syntaxe

Posté par  .
Étiquettes : aucune
0
26
juil.
2005
Bonjour,
j'ai qqes petites erreurs en compilant et je ne vois pas en quoi ca pose probleme: (notamment la premiere):


Dans le fichier inclus à partir de src/CTTSMrcpClient.cxx:9:
include/CTTSMrcpClient.hxx: Dans function « CTTSAbstract*
NewCTTSAbstract(CVoiceAppInfo*) »:
include/CTTSMrcpClient.hxx:29: erreur d'analyse syntaxique avantle jeton « (
»
include/CTTSMrcpClient.hxx: At global scope:
include/CTTSMrcpClient.hxx:232: erreur de syntaxes avantle jeton « * »
include/CTTSMrcpClient.hxx:235: erreur de syntaxes avantle jeton « * »
include/CTTSMrcpClient.hxx:238: « RtpSession » n'a pas été déclaré dans
cet horizon
include/CTTSMrcpClient.hxx:238: « Sptr » est utilisé comme type, mais n'est
pas défini comme type.


avec pour debut de fichier cxx:
Dans le fichier inclus à partir de src/CTTSMrcpClient.cxx:9:
include/CTTSMrcpClient.hxx: Dans function « CTTSAbstract*
NewCTTSAbstract(CVoiceAppInfo*) »:
include/CTTSMrcpClient.hxx:29: erreur d'analyse syntaxique avantle jeton « (
»
include/CTTSMrcpClient.hxx: At global scope:
include/CTTSMrcpClient.hxx:232: erreur de syntaxes avantle jeton « * »
include/CTTSMrcpClient.hxx:235: erreur de syntaxes avantle jeton « * »
include/CTTSMrcpClient.hxx:238: « RtpSession » n'a pas été déclaré dans
cet horizon
include/CTTSMrcpClient.hxx:238: « Sptr » est utilisé comme type, mais n'est
pas défini comme type.

et pour .hxx
/*
*/

#ifndef CTTSMRCPCLIENT_HXX
#define CTTSMRCPCLIENT_HXX

#include "CTTSAbstract.h"

/**
* num�o du port rtp utilis�par une instance de CTTSMrcpClient
*/
static int portNumber;

/**
* Calcul du num�o de port
*/
static int getPortNumber() {
portNumber = (portNumber + 1) % 65000;
return portNumber;
}

extern "C" PCTTSAbstract NewCTTSAbstract(PCVoiceAppInfo info)
{
return new CTTSMrcpClient(info) ;
}


extern "C" void DeleteCTTSAbstract(PCTTSAbstract ptr)
{
delete ptr;
}

extern "C" int ConfigureCTTSAbstract(PCVoiceAppInfo info)
{

return 1;
}

extern "C" int InitCTTSAbstract(PCVoiceAppInfo info)
{

return 1;
}

extern "C" int ShutdownCTTSAbstract(PCVoiceAppInfo info)
{

return 1;
}


class CTTSMrcpClient : public CTTSAbstract
{

public:

/**
* Constructor
*/
CTTSMrcpClient(PCVoiceAppInfo info);

/**
* Destructor
*/
~CTTSMrcpClient();

/**
* Lancement du thread Rtp
*/
void StartRtpThread() ;

etc...........................


voila
  • # messages de m....

    Posté par  (site web personnel) . Évalué à 2.

    Bon, déjà, si tu veux comprendre les messages d'erreur de GCC,

    export LANG=en_US

    Parce que la traduction française est catastrophique !

    Sinon, si tu ne nous dis pas sur quelle ligne ça plante, on va avoir du mal...
    • [^] # Re: messages de m....

      Posté par  . Évalué à 1.

      include/CTTSMrcpClient.hxx:29: erreur d'analyse syntaxique avantle jeton « (

      me semble compréhensible ....
      Je dirais meme que ce ne plante pas, mais que ce ne compile pas a cause d'un pb de syntaxe a la ligne 29 de CTTSMrcpClient.hxx
      • [^] # Re: messages de m....

        Posté par  (site web personnel) . Évalué à 2.

        Celui-là est comprehensible, en effet. Par contre, si tu avais déjà entendu "horizon" pour dire portée, bah pas moi.

        Le jour ou G++ de parlera de « cet » argument pour parler de "this", tu comprendras le sens de ma remarque ;-).
  • # a vue de nez

    Posté par  . Évalué à 2.

    extern "C" PCTTSAbstract NewCTTSAbstract(PCVoiceAppInfo info)
    {
    return new CTTSMrcpClient(info) ;
    }

    deverait etre ecrit comme cela je pense :

    extern "C"
    {
    PCTTSAbstract NewCTTSAbstract(PCVoiceAppInfo info)
    {
    return new CTTSMrcpClient(info) ;
    }
    }

    et le reste a l'avenant.

    Mais en a tu vraiment besoin de extern "C" ?
    • [^] # Re: a vue de nez

      Posté par  . Évalué à 0.

      et avec fonctions inline.. ca donnerait quoi??
      • [^] # Re: a vue de nez

        Posté par  . Évalué à 4.

        tu veux en faire quoi ?
        ces fonctions peuvent etre 'inlinée', mais sais tu ce que tu est en train de faire, et a quoi ca sert ?

        Je pense que tu devrais commencer a développer sans te soucier de complication syntaxique puis y pense quand tu auras plus de recul
    • [^] # Re: a vue de nez

      Posté par  (site web personnel) . Évalué à 2.

      Je suppose qu'il a besoin de extern "C", sinon, il n'aurait pas besoin de la fonction (qui est un wrapper autour de "new").

      Les accolades ne sont pas indispensables : Le programme suivant compile, par exemple.

      extern "C"
      void foo () { }
      • [^] # Re: a vue de nez

        Posté par  . Évalué à 2.

        ca compile peut etre parce que tu n'a qu'une ligne apres comme pour
        if (bidule==NULL)
        return 0;

        Sinon new n'appartenant pas au langage C, un extern est pas indique. Les fonctions qu'il a défini sont en plus parfaitement compilable en C++.
        • [^] # Re: a vue de nez

          Posté par  (site web personnel) . Évalué à 2.

          > ca compile peut etre parce que tu n'a qu'une ligne apres

          Ou peut-être pas ;-).

          extern "C"
          int foo (int x, int y) {
          int z;

          z = x + y;
          return z - 42;
          }


          > Sinon new n'appartenant pas au langage C, un extern est pas indique.

          Justement. "new" n'appartient pas au langage C, donc, pour pouvoir l'appeler depuis du code en C, tu as besoin d'un wrapper. Si son but n'était pas d'appeler "new" depuis du C, je ne vois pas l'intérêt de la fonction (m'enfin, j'ai pas toutes les données non plus ...).

          A la frontière entre le C et le C++, tu as forcément des fonctions dont la déclaration (donc le .h) est compilable en C, et le corps compilable seulement en C++.
          • [^] # Re: a vue de nez

            Posté par  . Évalué à 2.

            je suis d'accord, ce doit etre un warpper mais en indiquant extern C, tu dis au compilateur de compile a la facon C donc sans les mot clé du C++.
            • [^] # Re: a vue de nez

              Posté par  . Évalué à 2.

              en fait, je croit que c'est le bordel sont code ;D
            • [^] # Re: a vue de nez

              Posté par  (site web personnel) . Évalué à 2.

              Non, tu dis au compilateur de ne pas faire le mangling à la C++. Ça n'a pas d'impact sur la sémantique ou la syntaxe de ton code, seulement sur la manière de gérer les symboles, qui ont une importance au moment du link.

              extern "C" veut dire « appelable depuis du C », pas « compilable en C ».
              • [^] # Re: a vue de nez

                Posté par  . Évalué à 2.

                oh !
                Si ce que tu dis en vrai, alors tu m'apprend quelque chose...
                merci :o)
                • [^] # Re: a vue de nez

                  Posté par  (site web personnel) . Évalué à 2.

                  > Si ce que tu dis en vrai

                  Si ce que je dis est faux, comment expliques-tu que le code suivant compile ? ;-)

                  extern "C"
                  char * foo () {
                  return reinterpret_cast<char *>(new int(3));
                  }
                  • [^] # ko technique ;o)

                    Posté par  . Évalué à 3.

                    je m'incline, j'ai emit des réserves car je n'ai pas le tps de vérifier par moi meme.
                • [^] # Re: a vue de nez

                  Posté par  (site web personnel) . Évalué à 2.

                  > Si ce que tu dis en vrai

                  Si ce que je dis est faux, comment expliques-tu que le code suivant compile ? ;-)

                  extern "C"
                  char * foo () {
                  return reinterpret_cast<char *>(new int(3));
                  }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.