u_int8_t et unsigned char erreur de couplage
Je suis en utilisant le modèle de la fonction:
template<typename T> void func(const T& value)
{
obj->func(value);
}
où obj est un objet de la classe:
void my_object::func(int64_t value) { ... }
void my_object::func(uint64_t value) { ... }
void my_object::func(uint32_t value) { ... }
void my_object::func(uint16_t value) { ... }
void my_object::func(uint8_t value) { ... }
Le problème est avec u_int8_t surcharge de my_object::func() remplacer. L'éditeur de liens se plaint externe non résolu symboles à des surcharges, qui devrait ont unsigned char paramètre.
Dois-je remplacer u_int8_t surcharge avec unsigned char surcharge?
Edit: Viens de remarqué que l'éditeur de liens se plaint un uint64_t et int64_t trop.
Je compile sous Windows à l'aide MSVC++ 2008 Express.
Edit: toutes mes Excuses, je déclaré my_object::func(u_int8_t valeur) fonction (et d'autres), mais je n'a pas défini.
D'ailleurs, qu'est-ce que votre compilateur?
MSVC++ 2008 Express
Qu'est-ce que le exact message d'erreur que vous obtenez?
Vous devriez essayer de réduire l'ampleur du problème et de donner plus de détails sur ce que vous êtes en train de faire. Est-ce vraiment à cause de la modèle - ce qui se passe si vous faites un appel direct de l'obj::func() à la place? Comment définissez-vous votre classe, et où et comment vous l'avez mis en œuvre? Avec seulement la description que vous avez fournie, les gens doivent deviner ce qui se passe réellement.
Assurez-vous d'utiliser les mêmes en-têtes et donc typedefs de ces types d'entiers. MSVC a des défauts avec la façon dont il résout des types équivalents. Dans certains cas, deux types de C++ identiques, mais MSVC a interne distinct types pour eux. Ces types interne se rendre à l'éditeur de liens, ainsi qu'une incompatibilité.
MSVC++ 2008 Express
Qu'est-ce que le exact message d'erreur que vous obtenez?
Vous devriez essayer de réduire l'ampleur du problème et de donner plus de détails sur ce que vous êtes en train de faire. Est-ce vraiment à cause de la modèle - ce qui se passe si vous faites un appel direct de l'obj::func() à la place? Comment définissez-vous votre classe, et où et comment vous l'avez mis en œuvre? Avec seulement la description que vous avez fournie, les gens doivent deviner ce qui se passe réellement.
Assurez-vous d'utiliser les mêmes en-têtes et donc typedefs de ces types d'entiers. MSVC a des défauts avec la façon dont il résout des types équivalents. Dans certains cas, deux types de C++ identiques, mais MSVC a interne distinct types pour eux. Ces types interne se rendre à l'éditeur de liens, ainsi qu'une incompatibilité.
OriginalL'auteur mnn | 2011-01-01
Vous devez vous connecter pour publier un commentaire.
C'est le
include
fichier doit inclure #pour utiliser les types mentionnés ci-dessus (C99 recommandations)#include <stdint.h>
Non, je suis en train de construire sur Windows.
Elle conduit à lien des erreurs parce que la vous avez à
#include
n'aura pas converti avant la compilation via letypedef
les déclarations de tous les int32... En d'autres termes, lors de la compilation de tous les mentionnés ci-dessus, des types spéciaux n'existent plus - ils ne sont donc pas présents lors de les liens.stdint.h
a été inclus dans le C99, afin d'aider les programmes à la portabilité. Il est également disponible sur Windows. Voir en.wikipedia.org/wiki/Stdint.hFaut vraiment être #include <cstdint> pour les programmes C++. Cet en-tête n'est pas inclus avec VS2008, mais vous pouvez trouver un fichier compatible à plusieurs endroits sur le net.
OriginalL'auteur Ring Ø
Je devine que
uint8_t
a ététypedef
ed commeunsigned char
, c'est pourquoi vous voyez qu'.hm.. je ne suis pas sûr, mais
uint8_t
appartient àstdint.h
dont le but est de faire abstraction de types primitifs, qui peut à son tour être différents dans les différentes plates-formes.La bibliothèque, je travaille avec a fichier include, qui se différencient entre les environnements de build. Si c'est windows il définit tous les types int manuellement, si Linux il comprend stdint.h et inttypes.h
OriginalL'auteur Mehrdad