尽力在此处发布问题,尽力解决我的问题。但是,valadoc搜索系统最近已被打破,而#vala IRC频道对Genie代码(可以理解)的帮助较小。
我正在努力提供从this问题到this早期pandoc gui app的OOP Gtk界面。
我在编译时遇到错误pandoc-gui.gs:56.24-56.43: error: The type name `DocumentFileSelector' could not be found\n _document_selector:DocumentFileSelector
。该类稍后在程序中定义,但我似乎无法找到我做错的因为它对init不可见。
这是init例程:
init
Intl.setlocale()
Gtk.init (ref args)
var header = new Header ( "Pandoc GUI" )
var body = new WorkingFile( )
var app = new AppWindow ( header,body )
var load_new_content_command = new Load( body, document_selector )
var document_selector = new DocumentFileSelector( app )
var convert_command = new Convert (document_selector)
header.add_item( new OpenButton( load_new_content_command ) )
header.add_item( new ConvertButton ( convert_command ) )
app.show_all ()
Gtk.main ()
这是Convert类:
class Convert:Object implements Command
_document_selector:DocumentFileSelector
construct ( document_selector:DocumentFileSelector )
_document_selector = document_selector
def execute()
var a = new ToPDF()
a.convert.begin( document_selector.whichFile(), "output_file.pdf" )
接口:
interface Command:Object
def abstract execute()
interface DocumentSelector:Object
def abstract select():bool
def abstract get_document():string
DocumentFileSelector类:
class DocumentFileSelector:Object implements DocumentSelector
_parent:Window
_uri:string = ""
_filename:string = ""
construct( parent:Window )
_parent = parent
def select():bool
var dialog = new FileChooserDialog( "Open file",
_parent,
FileChooserAction.OPEN,
dgettext( "gtk30", "_OK"),
ResponseType.ACCEPT,
dgettext( "gtk30", "_Cancel" ),
ResponseType.CANCEL)
selected:bool = false
var response = dialog.run()
case response
when ResponseType.ACCEPT
_filename = dialog.get_filename()
_uri = dialog.get_uri()
selected = true
dialog.destroy()
return selected
def whichFile():string
return _uri
def get_document():string
text : string
len : size_t
try
FileUtils.get_contents (_filename, out text, out len)
except ex : FileError
print "%s\n", ex.message
return text
为什么在这种情况下init不会看到DocumentFileSelector?
注意:我仍然在弄清楚如何编写一个可重复性最小的问题,但是它并不像OOP那样简单,它具有所有相互依赖的部分。出于这个原因,以下是整个code,以防我提供的内容不足以帮助。
答案 0 :(得分:0)
不幸的是,您在Genie解析器中遇到了一个错误。代码中有三个位置,您使用两个缩进来指示一个新的代码块。这些是:
case when ...
<{1}} <{1}}方法中的select()
块
DocumentFileSelector
<{1}} <{1}}方法中的try...except
块
醇>
例如,更改
get_document()
到
DocumentFileSelector
修复后,您的代码中会遇到许多其他类型错误,但您应该能够弄清楚如何修复Genie错误消息中的错误。
Genie解析器正在读取两个缩进,但是因为它没有保留记录它正在寻找两个标记以标记块的结尾而感到困惑。任何希望修复它的人都会看一下Developing Genie。