无法访问kotlin多平台中的预期类构造函数参数

无法访问kotlin多平台中的预期类构造函数参数,kotlin,kotlin-multiplatform,kmm,Kotlin,Kotlin Multiplatform,Kmm,我目前正在使用kotlin开发一个多平台模块。要做到这一点,我依赖于 我在Common.kt中声明了一个简单的类: expect class Bar constructor( name: String ) fun hello(bar: Bar) { print("Hello, my name is ${bar.name}") } actual data class Bar actual constructor( val name: String ) 我想在公

我目前正在使用kotlin开发一个多平台模块。要做到这一点,我依赖于

我在
Common.kt
中声明了一个简单的类:

expect class Bar constructor(
    name: String
)
fun hello(bar: Bar) {
    print("Hello, my name is ${bar.name}")
}
actual data class Bar actual constructor(
    val name: String    
)
我想在公共方法中使用定义的类(也出现在
common.kt
中):

实际实现在
Jvm.kt
中定义:

expect class Bar constructor(
    name: String
)
fun hello(bar: Bar) {
    print("Hello, my name is ${bar.name}")
}
actual data class Bar actual constructor(
    val name: String    
)
问题是我的
hello
函数中出现以下错误

未解析的引用:名称


我做错了什么?

它也应该是
expect
部分中的
val name
,无论是在构造函数参数列表中还是作为成员属性

预期的类构造函数不能有属性参数

因此,有必要使用
val name:String

“Bar”的实际构造函数没有相应的预期声明

但是,要使实际构造函数与预期声明匹配,参数的数量必须相同。这就是为什么除了存在属性之外,构造函数中还添加了
参数

expect class Bar(name: String) {
    val name: String
}

actual class Bar actual constructor(actual val name: String)
注意:如果我们将预期类的构造函数保留为空,我们将看到IDE在当前类中添加构造函数时如何抱怨不兼容


GL

如果我这样做,我会得到
预期的类构造函数不能有属性参数
。实际类仍应能够将其作为属性构造函数参数实现。如果这样做,则无法实例化该类:
预期的类栏没有默认构造函数。
。哪一行出现此错误?我不明白为什么需要一个默认构造函数。虽然这段代码可以回答这个问题,但提供关于为什么和/或这段代码如何回答这个问题的额外上下文可以提高它的长期价值。是的@Braian,有了您的经验,您应该更清楚:)我不赞成删除,但请添加一个类似的解释,说明为什么需要添加
val
。感谢您的反馈。更新答案。尝试从expect类中删除
构造函数。