Ассоциативный массив .remove [], вызывающий core.stdc.stdio.remove в dmd 2.0 - PullRequest
4 голосов
/ 04 августа 2010

У меня есть следующий код в 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
}

Всякий раз, когда я пытаюсь скомпилировать с dmd2.0, я получаю следующие ошибки

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

В текущей документации по D2.0 рекомендуется использовать array.remove [key] для того, что я пытаюсь сделать, но похоже, что компилятор думает, что я пытаюсь вызвать функцию std.c (stdc?). Почему это происходит? Это просто ошибка в dmd2.0?

1 Ответ

4 голосов
/ 05 августа 2010

Попробуйте использовать

Attached.remove(place.name());

Обратите внимание на использование скобок вместо квадратных скобок. Квадратные скобки используются только для индексации.

...