VS Code中运行依赖其他文件的Kotlin文件报错的解决方法
Kotlin编译报错"unresolved reference: foo"的解决方法
问题场景
桌面有一个master文件夹,内含main.kt和foo.kt两个Kotlin文件:
main.kt代码:
import master fun main() { println("hello") foo() }
foo.kt代码:
import master fun foo(){ println("code from foo") }
执行命令kotlinc hello.kt -d hello.jar时,出现错误:error: unresolved reference: foo
问题原因及解决方法
核心问题
- 编译命令写错文件名:你要编译的是
main.kt,不是hello.kt - 包声明逻辑错误:错误使用
import master,要么没声明对应包,要么不需要包却加了无效导入 - 编译未覆盖依赖文件:只编译单个文件时,编译器找不到
foo()的定义
方案1:无包结构(轻量运行)
这是最适配你轻量需求的方案:
- 删掉两个文件里的
import master,修改后代码:main.kt:fun main() { println("hello") foo() }foo.kt:fun foo(){ println("code from foo") } - 执行编译命令(必须同时包含两个文件):
kotlinc main.kt foo.kt -d hello.jar - 运行jar包:
java -jar hello.jar
方案2:使用master包结构
如果确实需要包结构:
- 把两个文件开头的
import master改成package master,修改后:main.kt:package master fun main() { println("hello") foo() }foo.kt:package master fun foo(){ println("code from foo") } - 编译命令同样需要包含两个文件:
kotlinc main.kt foo.kt -d hello.jar - 运行时需要指定主类的全限定名:
java -cp hello.jar master.MainKt
内容的提问来源于stack exchange,提问作者Kyle Angelo Gonzales
相关产品推荐
相关产品推荐

