Mein Problem ist, dass ich, wenn ich eine heruntergeladene Bibliothek erstellen möchte, einige seltsame Kompilierfehler von GCC bekomme und der Code, den der Compiler korrigieren möchte, scheint genau richtig zu sein.GCC-Kompilierfehler: Deklaration von 'strlen' muss verfügbar sein
Die Fehler sind wie folgt aus:
Catalogue.h:96: error: there are no arguments to ‘strlen’ that depend on a template parameter, so a declaration of ‘strlen’ must be available
Hier ist der Code um Zeile 96:
GaCatalogueEntry(const char* name, T* data)
{
if(name)
{
_nameLength = (int)strlen(name); // LINE 96
// copy name
_name = new char[ _nameLength + 1 ];
strcpy(_name, name); // LINE 100: similar error
_data = data;
return;
}
_name = NULL;
_nameLength = 0;
_data = NULL;
}
Was kann ich tun, diese Fehler zu kompilieren zu beheben?
Es scheint, dass Sie eine Gruppe von Globals mit Namen haben, die '_ [a-z]. *' Entsprechen, diese Namen sind für die Implementierung reserviert. ('_ [a-z]. *' ist OK für nicht-globale Namen wie lokale Variablen und Klassenmitglieder) – MSalters
Ich glaube nicht, dass sie globale - sondern Mitgliedsvariablen sind. Ich vermute, GaCatalogueEntry ist eine Member-Funktion in einer Template-Klasse. Aber Sie haben Recht, es ist gefährlich, eine Namenskonvention zu haben, die Unterstrichpräfixe beinhaltet. Für Mitgliedsvariablen ist es besser, das Präfix m_ oder das Suffix _ zu verwenden. –