首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不编译gtk2的Nim

不编译gtk2的Nim
EN

Stack Overflow用户
提问于 2017-10-24 16:05:59
回答 1查看 110关注 0票数 1

我正在尝试以下代码,这些代码是从application#Nim中修改的(代码编译时没有任何问题):

代码语言:javascript
复制
import gtk2

var
  win = windowNew WINDOW_TOPLEVEL
  label1 = labelNew  "first:"
  entry1 = entryNew
  label2 = labelNew  "second:"
  entry2 = entryNew
  button = buttonNew "Calculate"
  reslabel = labelNew  "Result"
  vbox = vboxNew(true, 1)
  counter = 0

proc clickedMe(o: var PButton, lab: PLabel) =
  inc counter
  label1.setText "You clicked me " & $counter & " times"

nim_init()
win.setTitle "My calculator"

vbox.add label1
vbox.add entry1
vbox.add label2
vbox.add entry2
vbox.add button
vbox.add reslabel

win.add vbox
discard win.signal_connect("delete-event", SignalFunc mainQuit, nil)
discard button.signal_connect("clicked", SignalFunc clickedMe, label)
win.showAll()
main()

我使用以下命令:

代码语言:javascript
复制
nim c -r mygui.nim 

但是,它提供了以下错误输出:

代码语言:javascript
复制
Hint: used config file '/etc/nim.cfg' [Conf]
Hint: system [Processing]
Hint: mygui [Processing]
Hint: gtk2 [Processing]
Hint: glib2 [Processing]
Hint: atk [Processing]
Hint: pango [Processing]
Hint: gdk2pixbuf [Processing]
Hint: gdk2 [Processing]
Hint: cairo [Processing]
mygui.nim(23, 5) Error: type mismatch: got (PVBox, proc (): PEntry{.cdecl, gcsafe.})
but expected one of: 
proc add(x: var string; y: string)
proc add(x: var string; y: char)
proc add(factory: PIconFactory; stock_id: cstring; icon_set: PIconSet)
proc add(result: var string; x: int64)
proc add(x: var string; y: cstring)
proc add(items: PStockItem; n_items: guint)
proc add[T](x: var seq[T]; y: T)
proc add(container: PContainer; widget: PWidget)
proc add(result: var string; x: float)
proc add[T](x: var seq[T]; y: openArray[T])
proc add(list: PTargetList; target: gdk2.TAtom; flags: guint; info: guint)

我正在Debian稳定Linux上工作,并且已经从Debian存储库安装了Nim0.16.0。

问题在哪里,如何解决?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-25 09:35:22

我不知道尼姆语言,但是看看网络上的其他例子会让你的参考信息看起来很奇怪。这可能是有效的,但不常见,见:

错误信息说明了一切:

代码语言:javascript
复制
mygui.nim(23, 5) Error: type mismatch: got (PVBox, proc (): PEntry{.cdecl, gcsafe.})
but expected one of: 
proc add(x: var string; y: string)

消息说,您在第23行第5列上传递了错误的参数类型。您使用一些参数调用vbox.add,它需要另一种类型的参数。我不知道尼姆,但这里使用的呼叫约定含糊不清:

代码语言:javascript
复制
entry2 = entryNew

您将其解释为“创建一个空条目”,但它也可以被视为“在变量entryNew中放置对过程entry2的引用”,这似乎是问题所在,因此出现了got (PVBox, proc (): PEntry

在我链接到的其他示例中,人们使用括号,如下所示:

代码语言:javascript
复制
label2 = labelNew("second:")
entry2 = entryNew()

这在我看来更符合逻辑,因为它避免了模棱两可的现象。也许这也会奏效:

代码语言:javascript
复制
label2 = labelNew "second:"
entry2 = entryNew ""

但这在我看来很容易出错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46915198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档