uint8_t oder unsigned char linking-Fehler
Ich bin mit der template-Funktion:
template<typename T> void func(const T& value)
{
obj->func(value);
}
wo obj ist ein Objekt der Klasse:
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) { ... }
Ist das problem mit uint8_t überlastung der my_object::func() überschreiben. Linker beschwert sich über nicht aufgelöste externe Symbole zu überlastungen, die sollte haben unsigned char parameter.
Sollte ich ersetzen uint8_t überlastung mit unsigned char überlastung?
Edit: Gerade eben bemerkt, dass der linker beschwert sich über uint64_t und int64_t zu.
Ich kompilieren unter Windows mit MSVC++ 2008 Express.
Edit: Entschuldigung, ich erklärt my_object::func(uint8_t Wert) - Funktion (und andere), aber ich nicht definiert.
Übrigens, was ist der compiler?
MSVC++ 2008 Express
Was ist der exakt Fehlermeldung, die Sie bekommen?
Sie sollten versuchen, zu reduzieren die problem-Bereich und geben Sie weitere details darüber, was Sie eigentlich tun. Ist es wirklich, weil die Vorlage - was passiert, wenn Sie eine direkte Aufruf von obj::func() statt? Wie definieren Sie Ihre Klasse, und wo und wie haben Sie es umgesetzt? Mit nur die Beschreibung, die Sie Menschen, die würde haben, zu erraten, was eigentlich passiert ist.
Stellen Sie sicher, dass Sie die gleichen Kopfzeilen und damit die Typdefinitionen dieser integer-Typen. MSVC hat Mängel mit, wie es behebt äquivalente Typen. In bestimmten Fällen zwei Typen sind in C++ identisch, aber MSVC hat verschiedene interne Typen für Sie. Die internen Typen machen es dem linker, also ein Missverhältnis.
MSVC++ 2008 Express
Was ist der exakt Fehlermeldung, die Sie bekommen?
Sie sollten versuchen, zu reduzieren die problem-Bereich und geben Sie weitere details darüber, was Sie eigentlich tun. Ist es wirklich, weil die Vorlage - was passiert, wenn Sie eine direkte Aufruf von obj::func() statt? Wie definieren Sie Ihre Klasse, und wo und wie haben Sie es umgesetzt? Mit nur die Beschreibung, die Sie Menschen, die würde haben, zu erraten, was eigentlich passiert ist.
Stellen Sie sicher, dass Sie die gleichen Kopfzeilen und damit die Typdefinitionen dieser integer-Typen. MSVC hat Mängel mit, wie es behebt äquivalente Typen. In bestimmten Fällen zwei Typen sind in C++ identisch, aber MSVC hat verschiedene interne Typen für Sie. Die internen Typen machen es dem linker, also ein Missverhältnis.
InformationsquelleAutor mnn | 2011-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die
include
Datei sollte #include Nutzung der oben genannten Typen (C99 Empfehlungen)#include <stdint.h>
Nein, ich Baue auf Windows.
Es führt zu link Fehlern, denn die gehören Sie zu
#include
wird nicht konvertiert haben, vor der Kompilierung über dietypedef
Erklärungen alle int32... In anderen Worten, während der Kompilierung alle der oben genannten, speziellen Arten nicht mehr vorhanden sind - so sind Sie nicht vorhanden, während der Verknüpfung.stdint.h
wurde in C99, um zu helfen, Programme Portabilität. Es ist auch unter Windows verfügbar. Siehe en.wikipedia.org/wiki/Stdint.hEigentlich sollte das #include <cstdint> für C++ - Programme. Dieser header ist nicht im Lieferumfang enthalten mit VS2008, aber Sie können finden, eine kompatible Datei in mehreren Orten auf der 'net.
InformationsquelleAutor Ring Ø
Ich vermute, dass
uint8_t
wurdetypedef
ed alsunsigned char
, also, warum bist du zu sehen, dass.hm.. ich bin nicht sicher, aber
uint8_t
gehört zustdint.h
ist das Ziel, abstrakte, Weg von primitiven Typen, die möglicherweise wiederum unterschiedlich in den verschiedenen Plattformen.Die Bibliothek, mit dem ich arbeite hat die include-Datei, die Unterscheidung zwischen build-Umgebungen. Wenn es windows es definiert alle int-Typen manuell, wenn Linux es umfasst stdint.h und inttypes.h
InformationsquelleAutor Mehrdad