Associatif .remove tableau [] appelant core.stdc.stdio.remove DMD 2.0
-
25-09-2019 - |
Question
Je le code suivant dans D
import std.stdio;
class Thing
{
// Fields
private string Name;
// Accessors
public string name() { return Name; }
}
class Place: Thing
{
// Fields
private Place[string] Attached;
// Modifiers
public void attach(Place place) { Attached[place.name()] = place; }
public void detach(Place place) { Attached.remove[place.name()]; } // error line
}
Chaque fois que je tente de compiler avec dmd2.0 je reçois les erreurs suivantes
Error: function core.stdc.stdio.remove (in const(char*) filename) is not callable using argument types (Place[string])
Error: cannot implicitly convert expression (this.Attached) of type Place[string] to const(char*)
Error: remove((__error)) must be an array or pointer type, not int
Les conseils actuels de documentation de D2.0 à utiliser array.remove [key] pour ce que je suis en train de faire, mais il semble que le compilateur pense que je suis en train d'appeler une fonction std.c (stdc?). Pourquoi serait-ce se produire? Est-ce juste un bug dans dmd2.0?
La solution
Essayez d'utiliser
Attached.remove(place.name());
Notez l'utilisation des parenthèses plutôt que de crochets. Les crochets sont utilisés pour l'indexation uniquement.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow