в главном корпусе у меня есть:golang: Могу ли я разделить C.int между пакетами
var foo C.int
foo = 3
t := fastergo.Ctuner_new()
fastergo.Ctuner_register_parameter(t, &foo, 0, 100, 1)
в пакете fastergo я есть:
func Ctuner_register_parameter(tuner unsafe.Pointer, parameter *C.int, from C.int, to C.int, step C.int) C.int {
...
}
если я пытаюсь запустить его, я получаю :
demo.go:14[/tmp/go-build742221968/command-line-arguments/_obj/demo.cgo1.go:21]: cannot use &foo (type *_Ctype_int) as type *fastergo._Ctype_int in function argument
я не совсем уверен, что идти пытается сказать мне здесь, но почему-то я думаю, что он хочет сказать мне, что все C.int не равны? Почему это так? как я могу решить эту проблему?
Эти два типа как-то кажутся разными (_Ctype_int и fastgo._Ctype_int). Я точно не знаю, как работает cgo, но откуда берется C.int? Это из какого-то импортированного пакета? –
@Laurent "C" - это псевдопакет для использования кода C в go. Читайте: http://golang.org/doc/articles/c_go_cgo.html в основном я имею в виду один и тот же тип (целое число на C) дважды, и Go не видит их как эквивалентные. – mnagel
Попробуйте определить '_Ctype_int' в пакете' fastgo', а затем последовательно ссылайтесь на него как 'fastgo._Ctype_int'. В настоящее время они находятся в разных областях. – Intermernet