我對 Go 還是比較陌生,我決定嘗試一些 OpenGL,因為存在一個為此提供綁定的 Go 庫。作為設置 OpenGL 的一部分,我需要使用 Go?glfw 庫。我需要使用 glfw 庫函數SetFramebufferSizeCallback ,它需要一個FrameBuffersizeCallback類型的參數;所以我基本上需要傳遞一個與我相信我已經完成的類型的簽名相匹配的函數。但是,我不斷收到以下錯誤:./main.go:43:35: 不能在 window.SetFramebufferSizeCallback 的參數中使用 fbCallback(類型 func(*glfw.Window,int32,int32))作為類型 glfw.FramebufferSizeCallback我真的不確定為什么會這樣。我檢查過我的 glfw 版本是否與文檔匹配;我已經檢查了 github 和我的機器上的實現代碼,它們都是一致的。所以我不知道我做錯了什么。這是我的代碼,如果構建它應該不會做任何有趣的事情,但會顯示錯誤:package mainimport (? ? "github.com/go-gl/gl/v3.3-core/gl"? ? "github.com/go-gl/glfw/v3.2/glfw"? ? "log"? ? "runtime")func fbCallback(window *glfw.Window, width int32, height int32) {? ? gl.Viewport(0, 0, width, height)}func init() {? ? runtime.LockOSThread()}func main() {? ? err := glfw.Init()? ? if err != nil {? ? ? ? panic(err)? ? }? ? defer glfw.Terminate()? ? glfw.WindowHint(glfw.ContextVersionMajor, 3)? ? glfw.WindowHint(glfw.ContextVersionMinor, 3)? ? glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)? ? window, err := glfw.CreateWindow(640, 480, "Testing", nil, nil)? ? if err != nil {? ? ? ? panic(err)? ? }? ? window.MakeContextCurrent()? ? if err := gl.Init(); err != nil {? ? ? ? log.Fatalln(err)? ? }? ? gl.Viewport(0, 0, 800, 600)? ? window.SetFramebufferSizeCallback(fbCallback) //Does not work}我對這應該如何真正工作的理解在以下有效的簡短程序中得到了證明。我很高興有人指出為什么這個簡短的示例有效而上面的示例無效。我的理解可能有一些漏洞。package mainimport (? ? "fmt")type callback func(int, int) intfunc sum(x int, y int) int {? ? return x + y}func useCallback(cb callback) {? ? result := cb(2, 3)? ? fmt.Println(result)}func main() {? ? useCallback(sum)}
1 回答

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
type?FramebufferSizeCallback?func(w?*Window,?width?int,?height?int)
對比
func?fbCallback(window?*glfw.Window,?width?int32,?height?int32)
您的函數沒有相同的簽名,它使用的是 int32 而不是 int。
- 1 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消