Je le code suivant:Ne peut pas utiliser (* struct) comme (* Interface) en valeur du champ
// eventloop.go
type Object interface {
ActivateSlot(name string, parameters vector.Vector);
}
// main.go
import loop "./eventloop"
// ...
const slotname = "printer"
type printer struct {
slot loop.Slot;
}
func (p *printer) Init() {
p.slot = loop.Slot{slotname, p}; // offending line
}
func (p *printer) ActivateSlot(name string, parameters vector.Vector) {
fmt.Println("Slot called: ", name);
}
Lorsque je tente de compiler, je reçois l'erreur suivante:
[email protected] ~/workspace/go $ ./build.sh
main.go:23: cannot use p (type *printer) as type *eventloop.Object in field value
Si Je commente la ligne offensante, elle compile et fonctionne bien. Qu'est-ce qu'il se passe ici? Qu'est-ce que je rate?
eventloop.Object est une interface. En théorie, tout type satisfait celui qui implémente la fonction déclarée. Il n'y a pas de type eventloop.Object explicite. –
C'est l'interface Object en haut de votre code? Oui, si cela est défini dans le package eventloop et contient juste cette méthode, cela devrait fonctionner. Avez-vous essayé avec un casting? –
Si Object est une interface, avez-vous spécifié votre emplacement comme type * Object? Cela ne fonctionne pas - * L'imprimante est de type Objet, pas de type * Objet –