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 Matthieu Moy (site web personnel) . Évalué à 2.
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 EdB . Évalué à 1.
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 Matthieu Moy (site web personnel) . Évalué à 2.
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 EdB . Évalué à 2.
{
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 moule2005 . Évalué à 0.
[^] # Re: a vue de nez
Posté par EdB . Évalué à 4.
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 Matthieu Moy (site web personnel) . Évalué à 2.
Les accolades ne sont pas indispensables : Le programme suivant compile, par exemple.
extern "C"
void foo () { }
[^] # Re: a vue de nez
Posté par EdB . Évalué à 2.
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 Matthieu Moy (site web personnel) . Évalué à 2.
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 EdB . Évalué à 2.
[^] # Re: a vue de nez
Posté par EdB . Évalué à 2.
[^] # Re: a vue de nez
Posté par Matthieu Moy (site web personnel) . Évalué à 2.
extern "C" veut dire « appelable depuis du C », pas « compilable en C ».
[^] # Re: a vue de nez
Posté par EdB . Évalué à 2.
Si ce que tu dis en vrai, alors tu m'apprend quelque chose...
merci :o)
[^] # Re: a vue de nez
Posté par Matthieu Moy (site web personnel) . Évalué à 2.
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 EdB . Évalué à 3.
[^] # Re: a vue de nez
Posté par Matthieu Moy (site web personnel) . Évalué à 2.
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.