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

in-charge

11 réponses
Avatar
Nicolas
Dans un programme j'ai cette erreur :
undefined reference to `Ecrire::Ecrire[in-charge](char *)
que veut dire le mot clé in-charge svp ?

10 réponses

1 2
Avatar
Fabien LE LEZ
On Mon, 17 Jan 2005 22:07:08 +0000, Nicolas
:

undefined reference to `Ecrire::Ecrire[in-charge](char *)


Quel compilo ?

--
;-)

Avatar
Nicolas
Fabien LE LEZ wrote:

On Mon, 17 Jan 2005 22:07:08 +0000, Nicolas
:

undefined reference to `Ecrire::Ecrire[in-charge](char *)


Quel compilo ?

g++



Avatar
kanze
Nicolas wrote:
Dans un programme j'ai cette erreur :
undefined reference to `Ecrire::Ecrire[in-charge](char *)
que veut dire le mot clé in-charge svp ?


Quand tu écris un constructeur, certains compilateurs en
génèrent en fait deux, un qui est appelé pour créer un objet du
type, et un qui est appelé des constructeurs des classes
dérivées. Chez g++, le premier s'appelle [in-charge].

Dans la pratique, quand tu as ce genre de message de l'éditeur
de liens, ça veut dire que tu ne lui as pas fourni le
constructeur, c'est tout. En ce qui te concerne, dans ce cas-ci,
l'[in-charge] ne veut rien dire.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
Matthieu Moy
writes:

Dans la pratique, quand tu as ce genre de message de l'éditeur
de liens, ça veut dire que tu ne lui as pas fourni le
constructeur, c'est tout.


Plus précisement, que tu as déclaré le constructeur, mais que tu n'as
pas donné d'implementation.

--
Matthieu

Avatar
Jean-Marc Bourguet
Nicolas writes:

Dans un programme j'ai cette erreur :
undefined reference to `Ecrire::Ecrire[in-charge](char *)
que veut dire le mot clé in-charge svp ?


Visiblement tu utilises un constructeur declare mais non defini a
moins qu'il soit mis dans une bibliotheque consideree avant la
premiere reference.

A propos d'in-charge, g++ et d'autres compilateurs generent deux
constructeurs (ou du moins deux points d'entree pour les
constructeurs), un charge de faire l'initialisation des membres
virtuels -- qualifie de in-charge --, l'autre ne le faisant pas. La
difference entre les deux est purement l'affaire du compilateur mais
on se retrouve parfois a la remarquer.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Fabien LE LEZ
On 18 Jan 2005 09:13:04 +0100, Jean-Marc Bourguet :

La
difference entre les deux est purement l'affaire du compilateur mais
on se retrouve parfois a la remarquer.


D'ailleurs, y a-t-il une bonne raison pour que le linker en parle ?
Un des deux constructeurs peut-il exister et pas l'autre ?


--
;-)

Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

On 18 Jan 2005 09:13:04 +0100, Jean-Marc Bourguet :

La difference entre les deux est purement l'affaire du compilateur
mais on se retrouve parfois a la remarquer.


D'ailleurs, y a-t-il une bonne raison pour que le linker en parle ?
Un des deux constructeurs peut-il exister et pas l'autre ?


Pas a ma connaissance. Mais le linker "sait" simplement qu'un nom a
ete reference et pas defini. Ensuite il le passe a une routine qui
mets en forme pour qu'il soit mieux reconnaissable par le
programmeur. Autrement dit

Ecrire::Ecrire[in-charge](char *)

plutot que

__6Ecrire6EcrireIcp

ou quelque chose d'approchant (je doute que le nom que j'ai donne soit
reellement utilise par un compilateur).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Nicolas
Matthieu Moy wrote:

writes:

Dans la pratique, quand tu as ce genre de message de l'éditeur
de liens, ça veut dire que tu ne lui as pas fourni le
constructeur, c'est tout.


Plus précisement, que tu as déclaré le constructeur, mais que tu n'as
pas donné d'implementation.



Et pourtant oui je l'ai implémenté


Avatar
Nicolas
Jean-Marc Bourguet wrote:

Nicolas writes:

Dans un programme j'ai cette erreur :
undefined reference to `Ecrire::Ecrire[in-charge](char *)
que veut dire le mot clé in-charge svp ?


Visiblement tu utilises un constructeur declare mais non defini a
moins qu'il soit mis dans une bibliotheque consideree avant la
premiere reference.


Que veux tu dires par là ? Dans la classe Ecrire j'ai fait une
autre petite classe qui me sert pour les méthodes d'Ecrire. Le
problème vient pe de là alors ?


Avatar
kanze
Nicolas wrote:
Matthieu Moy wrote:

writes:

Dans la pratique, quand tu as ce genre de message de
l'éditeur de liens, ça veut dire que tu ne lui as pas
fourni le constructeur, c'est tout.


Plus précisement, que tu as déclaré le constructeur, mais
que tu n'as pas donné d'implementation.


Et pourtant oui je l'ai implémenté


Mais pas dans un endroit où l'éditeur de liens peut le
rétrouver. Ou bien, tu l'as déclaré inline, mais tu as mis
l'implémentation dans un .cc, ou bien, tu as mis
l'implémentation dans un fichier que tu n'as pas donné à
l'éditeur de liens.

Attention aussi : l'ordre des bibliothèques est significatif
avec g++. C-à-d que si la bibliothèque A précède la bibliothèque
B dans la ligne de commande, l'éditeur de liens ne va pas
chercher dans A pour résoudre des externes dans B.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



1 2