Class 找不到错误
Class could not be found error
尽最大努力解决我的问题w/o 在这里发布问题。然而,valadoc 搜索系统最近被破坏了,#vala IRC 频道在涉及 Genie 代码时帮助不大(可以理解)。
瞄准
我正在尝试从 question to 早期的 pandoc gui 应用程序提供一个 OOP Gtk 接口。
问题
我在编译时遇到了错误 pandoc-gui.gs:56.24-56.43: error: The type name `DocumentFileSelector' could not be found\n _document_selector:DocumentFileSelector
。 class 稍后在程序中定义,但我似乎无法找到我做错了什么导致它对 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 ()
这是转换 class:
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:
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
问题
在这种情况下,为什么 DocumentFileSelector 没有被 init 看到?
注意:我仍在弄清楚如何编写一个最小可重现的问题,但是当涉及到所有相互依赖的部分的 OOP 时,它并不像听起来那么简单。出于这个原因,这里是完整的 code 以防我提供的内容不足以提供帮助。
很遗憾,您在 Genie 解析器中遇到了错误。您的代码中有三个地方使用两个缩进来表示一个新的代码块。它们是:
- 您的接口定义
DocumentFileSelector
的select()
方法中的case when ...
块
DocumentFileSelector
的get_document()
方法中的try...except
块
例如改
interface Command:Object
def abstract execute()
到
interface Command:Object
def abstract execute()
修复这些问题后,您会在代码中遇到许多其他类型的错误,但您应该能够从 Genie 错误消息中找出如何修复这些错误。
Genie 解析器正在读取两个缩进,但由于它没有保留记录它正在寻找两个缩进来标记块的结尾而感到困惑。任何想解决这个问题的人都可以看看 Developing Genie.
尽最大努力解决我的问题w/o 在这里发布问题。然而,valadoc 搜索系统最近被破坏了,#vala IRC 频道在涉及 Genie 代码时帮助不大(可以理解)。
瞄准
我正在尝试从
问题
我在编译时遇到了错误 pandoc-gui.gs:56.24-56.43: error: The type name `DocumentFileSelector' could not be found\n _document_selector:DocumentFileSelector
。 class 稍后在程序中定义,但我似乎无法找到我做错了什么导致它对 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 ()
这是转换 class:
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:
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
问题
在这种情况下,为什么 DocumentFileSelector 没有被 init 看到?
注意:我仍在弄清楚如何编写一个最小可重现的问题,但是当涉及到所有相互依赖的部分的 OOP 时,它并不像听起来那么简单。出于这个原因,这里是完整的 code 以防我提供的内容不足以提供帮助。
很遗憾,您在 Genie 解析器中遇到了错误。您的代码中有三个地方使用两个缩进来表示一个新的代码块。它们是:
- 您的接口定义
DocumentFileSelector
的select()
方法中的case when ...
块DocumentFileSelector
的get_document()
方法中的try...except
块
例如改
interface Command:Object
def abstract execute()
到
interface Command:Object
def abstract execute()
修复这些问题后,您会在代码中遇到许多其他类型的错误,但您应该能够从 Genie 错误消息中找出如何修复这些错误。
Genie 解析器正在读取两个缩进,但由于它没有保留记录它正在寻找两个缩进来标记块的结尾而感到困惑。任何想解决这个问题的人都可以看看 Developing Genie.