Umgebung: VS2005 C++ mit STLPort 5.1.4.std :: string einfügen Methode hat mehrdeutige Überladungen?
Kompilieren den folgenden Code-Schnipsel:
std::string copied = "asdf";
char ch = 's';
copied.insert(0,1,ch);
Ich erhalte eine Fehlermeldung:
Error 1 error C2668: 'stlpx_std::basic_string<_CharT,_Traits,_Alloc>::insert' : ambiguous call to overloaded function
Es scheint, dass das Problem der Einsatz Methodenaufruf auf dem String-Objekt ist.
Die beiden definierten Überlastungen
void insert (iterator p, size_t n, char c);
string& insert (size_t pos1, size_t n, char c);
Aber gegeben sind, dass STLPort ein einfaches Zeichen verwendet * als Iterator, ist die wörtliche Null in der insert-Methode in meinem Code nicht eindeutig.
So, während ich einfach das Problem, indem Hinting wie
copied.insert(size_t(0),1,ch);
Meine Frage ist, überwinden: ist diese Überlastung und mögliche Mehrdeutigkeit vorsätzliche in der Beschreibung? Oder eher eine unbeabsichtigte Nebenwirkung der spezifischen STLPort-Implementierung?
(Beachten Sie, dass der von Microsoft bereitgestellte STL dieses Problem nicht haben, da es eine Klasse für das Iterator hat, anstelle einem nackten Zeiger)
mehr streng sein: es 'copied.insert sein sollte (static_cast (0), static_cast (1), ch)' –
ereOn
@ereOn: Der zweite 'static_cast' nicht notwendig ist, da beide Überlastungen einen nehmen' size_t' als zweiter Parameter. –
Nicht unnötig wegen möglicher zukünftiger Überlastungen und des unsicheren Integraltyps '1'. – Marius