Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

exporter une structure (ou une classe)

3 réponses
Avatar
Alain Cabiran
Bonjour,

je cherche à faire ça :

j'ai un fichier contenant des structures, des fonctions,
et des macros. (je ne peux pas le modifier, c'est ncurses.h ...)

je voudrais utiliser ces fonctions et structures sans l'inclure
directement.

je crée donc un fichier wrapper.h et un wrapper.cpp comme ceci :


/* wrapper.h ******************************************/
WINDOW *initscr(); // pb WINDOW est inconnu
int endwin();
....
/******************************************************/

et // je compacte pour avoir moins de lignes

/* wrapper.cpp ****************************************/
extern "C" { namespace curses { #include <ncurses.h> } }

WINDOW * iniscr() { return curses::initscr(); }
int endwin() { return curses::endwin(); }
/******************************************************/

seulement, peut-on exporter une structure de cette façon et si oui
comment ? Je n'ai pas trouvé de réponse. si vous avez un idée, merci
d'avance. J'ai l'impression que je vais devoir redéclarer la structure
WINDOW mais si je peux éviter...

Alain

3 réponses

Avatar
Fabien LE LEZ
On Mon, 12 Sep 2005 20:28:58 +0200, Alain Cabiran
:

/* wrapper.h ******************************************/
WINDOW *initscr(); // pb WINDOW est inconnu


Pas grave, tant qu'il ne s'agit que d'un pointeur. Tu écris

class WINDOW;

juste avant et tout va bien.

(Note : je suppose ici que WINDOW est bien une classe ("class" ou
"struct"), pas une macro ou un typedef).

Avatar
Alain Cabiran
Bonjour,

j'avais déjà essayé :-)

j'obtiens
cannot convert `curses::WINDOW*' to `WINDOW*' in return

si je modifie WINDOW * newwin en curses::WINDOW * newwin, j'obtiens
error: new declaration `curses::WINDOW* newwin

si j'ajoute un using ou un typedef, même erreur évidemment

bref j'ai pas trouvé comment wrapper un entête pour n'avoir
en espace global que le minimum nécessaire. Tant qu'on utilise
des "procédures" pascalement parlant, pas de pb mais si on doit
renvoyer une structure... Le but étant de faire #include wrapper
et non #include ncurses.h

cordialement,

Alain

merci quand même


On Mon, 12 Sep 2005 20:28:58 +0200, Alain Cabiran
:


/* wrapper.h ******************************************/
WINDOW *initscr(); // pb WINDOW est inconnu



Pas grave, tant qu'il ne s'agit que d'un pointeur. Tu écris

class WINDOW;

juste avant et tout va bien.

(Note : je suppose ici que WINDOW est bien une classe ("class" ou
"struct"), pas une macro ou un typedef).




Avatar
Fabien LE LEZ
On Tue, 13 Sep 2005 19:38:05 +0200, Alain Cabiran
:

cannot convert `curses::WINDOW*' to `WINDOW*' in return


"curses" est un namespace ou une classe ?

Dans le premier cas, la "forward-declaration" doit se faire dans le
namespace :

namespace curses { class WINDOW; }

Dans le deuxième cas, tu l'as dans l'os, tu es maudit.