我是新手。我正在解决一个与此相似的问题,我有一个从动物结构继承的结构狗。我想链接方法,以便获得“我是动物。但是当我运行程序时,它会产生一个错误
dog.Animal.Hello()。Bark未定义(类型* Animal没有字段或方法Bark)
type Animal struct {
name string
age int
}
func (animal *Animal) Hello() *Animal {
fmt.Println("I am an animal")
return animal
}
type Dog struct {
*Animal
}
func (dog *Dog) Bark() *Dog {
fmt.Println("woof!")
return dog
}
func main() {
dog := &Dog{&Animal{name: "Peter", age: 25}}
dog.Hello().Bark()
}
我该如何克服。谢谢你的建议
答案 0 :(得分:1)
dog.Hello()
返回一个*Animal
,而不是*Dog
,因此您不能只对返回的值调用.Bark()
。
请注意,调用dog.Hello()
并不是真正对Hello()
结构的Dog
调用*Animal
,而是对其中包含的dog.animal.Hello()
的调用。它只是语法糖,等效于*Animal
(如果*Dog
字段是命名的,而不是匿名的)。这不是继承!
但是,您已经有一个.Bark()
,因此您可以直接致电dog.Hello()
dog.Bark()
:
cvtColor( image, gray_image, CV_BGR2GRAY );
关于接口的注释中的建议也可能适用,但是对于这个玩具示例,很难一开始就说出您要实现的目标。