【问题标题】:Expected class has no actual declaration预期类没有实际声明
【发布时间】:2019-07-17 04:55:55
【问题描述】:

我正在做一个多平台项目。

我的 gradle 文件的一部分看起来像这样

...
kotlin {
    jvm()
    jvm("api")
    js()
    mingwX64("mingw")
    sourceSets {
        ...
        val jvmMain by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
            }
        }
        val jvmTest by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-test")
                implementation ("org.jetbrains.kotlin:kotlin-test-junit")
            }
        }
        val apiMain by getting {
            dependencies {
                dependsOn(jvmMain)
            }
        }
        val jsMain by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-stdlib-js")
            }
        }
        ...
    }
}

现在在 commonsMain 源中我收到一个 IDE 错误(红色下划线),上面写着“预期的类 Sample 在 apiMain 中没有实际声明”,但 apiMain 取决于具有实际声明的 jvmMain。

我认为我不需要在 apiMain 中进行实际声明,因为我已经在 jvm 中有一个。

我应该采用不同的方法来设置我的源集吗?

反正项目编译得很好,我可以运行 apiMain,但是 IDE 错误真的让我很烦。

【问题讨论】:

标签: intellij-idea kotlin gradle-kotlin-dsl kotlin-multiplatform


【解决方案1】:

这是一个已知的 IDE 错误。见 YouTrack 票 here

现在,您可以使用@Suppress("NO_ACTUAL_FOR_EXPECT") 来消除 IDE 中的警告。不过我真的不推荐它,因为如果您缺少任何 actual 实现,您将遇到运行时崩溃而不是编译时错误。

【讨论】:

  • 我想,在它修复之前,我必须忍受它。谢谢
【解决方案2】:

它们应该在相同的包名下。

还要检查您的包名是否与您收到错误的包名相同

预期的类 Sample 在 apiMain

中没有实际声明

你需要有包 apiMain。

就我而言,我有 而且我必须在资源中创建两个文件夹

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多