无法找到类错误

时间:2016-07-03 02:29:49

标签: genie

尽力在此处发布问题,尽力解决我的问题。但是,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,以防我提供的内容不足以帮助。

1 个答案:

答案 0 :(得分:0)

不幸的是,您在Genie解析器中遇到了一个错误。代码中有三个位置,您使用两个缩进来指示一个新的代码块。这些是:

  1. 您的界面定义
  2. case when ... <{1}} <{1}}方法中的select()
  3. DocumentFileSelector <{1}} <{1}}方法中的try...except

    例如,更改

    get_document()

    DocumentFileSelector

    修复后,您的代码中会遇到许多其他类型错误,但您应该能够弄清楚如何修复Genie错误消息中的错误。

    Genie解析器正在读取两个缩进,但是因为它没有保留记录它正在寻找两个标记以标记块的结尾而感到困惑。任何希望修复它的人都会看一下Developing Genie