Класс не может быть найдена ошибка
Делать все возможное, чтобы попытаться решить мои проблемы без публикации вопросов здесь. Однако поисковая система valadoc недавно была взломана, и IRC-канал #vala менее полезен, когда дело доходит до кода Genie (понятно).
цель
Я пытаюсь предоставить интерфейс OOP Gtk из этого вопроса в это раннее приложение с графическим интерфейсом pandoc.
проблема
Я застрял с ошибкой pandoc-gui.gs:56.24-56.43: error: The type name `DocumentFileSelector' could not be found\n _document_selector:DocumentFileSelector
при компиляции. Класс определен позже в программе, но я не могу найти то, что сделал неправильно, что делает его невидимым для 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
Вопрос
Почему DocumentFileSelector не отображается init в этом случае?
Примечание. Я до сих пор выясняю, как написать минимально воспроизводимый вопрос, однако это не так просто, как кажется, когда дело доходит до ООП со всеми взаимозависимыми частями. По этой причине, вот весь код на случай, если того, что я предоставил, было недостаточно, чтобы помочь.
1 ответ
К сожалению, вы столкнулись с ошибкой в парсере Genie. В вашем коде есть три места, где вы используете два отступа для обозначения одного нового блока кода. Это:
- Ваши определения интерфейса
case when ...
блок вselect()
методDocumentFileSelector
try...except
блок вget_document()
методDocumentFileSelector
Например, изменить
interface Command:Object
def abstract execute()
в
interface Command:Object
def abstract execute()
После того, как вы исправите их, вы столкнетесь с рядом других ошибок типа в вашем коде, но вы должны быть в состоянии выяснить, как исправить их из сообщений об ошибках Genie.
Парсер Genie читает два отступа, но запутывается, потому что он не ведет записи, он ищет два отступа, чтобы отметить конец блока. Любой, кто хочет это исправить, взглянет на Developing Genie.