#android-studio #kotlin
#android-studio #kotlin
Вопрос:
Я изучаю программирование на Android (начальный уровень) и следую руководству. Я получаю сообщение об ошибке при запуске / сборке проекта. Expecting member declaration
. Я проверил код на наличие опечаток и синтаксических ошибок. Я погуглил это, но я просто не уверен, что это значит или что искать, чтобы это исправить.
Другие классы, используемые в проекте, автоматически просматриваются классом MainActivity?
Код частично:
MainActivity.kt:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
val friendlyDestroyer = Destroyer("Invincible")
val friendlyCarrier = Carrier("Indomitable")
val enemyDestroyer = Destroyer("Grey Death")
val enemyCarrier = Carrier("Big Grey Death")
val friendlyShipyard = ShipYard()
friendlyDestroyer.takeDamage(enemyDestroyer.shootShell())
friendlyDestroyer.takeDamage(enemyCarrier.launchAerialAttack())
// Fight back
enemyCarrier.takeDamage(friendlyCarrier.launchAerialAttack())
enemyCarrier.takeDamage(friendlyDestroyer.shootShell())
...
Любая строка, в которой есть экземпляр класса с вызовом функции, показывает red squiggly line
и ошибку.
В строке: friendlyDestroyer.takeDamage(enemyDestroyer.shootShell())
отображается expecting member declaration
ошибка практически в каждой части строки.
Это происходит при каждом экземпляре класса, вызывающего класс.
Я не вижу никаких ошибок для других классов / файлов.
Destroyer.kt:
package com.johndcowan.basicclasses
class Destroyer(name: String) {
// what is the name of the ship
var name: String = ""
private set
// what type of ship is it
// alwys a destroyer
val type = "Destroyer"
// how much the ship can take before sinking
private var hullIntegrity = 200
// how many shots left in the arsenal
var ammo = 1
// cannot be directly set externally
private set
// no external access whatsoever
private var shotPower = 60
// has the ship been sunk
private var sunk = false
// this code runs as the instance is being initialized
init {
// so we can use the name parameter
this.name = "$type $name"
}
fun takeDamage(damageTaken: Int) {
if (!sunk) {
hullIntegrity -= damageTaken
println("$name hull integrity = $hullIntegrity")
if (hullIntegrity <= 0){
println("Destroyer $name has been sunk")
sunk = true
}
} else {
// Already sunk
println("Error Ship does not exist")
}
}
fun shootShell():Int {
// let the calling code know how much damage to do
return if (ammo > 0) {
ammo--
shotPower
}else{
0
}
}
...
Чего я не вижу или не вижу?
Спасибо за любые советы.
Комментарии:
1. в вашем
imports
вверхуMainActivity
я не вижу вашегоDestroyer.kt
файла. Проверьте, импортировано ли у вас это2. Кроме того, ваш код находится внутри класса
MainActivity
, хотя на самом деле он должен быть внутриonCreate
метода или любого другого метода, который вам нужно переопределить3. Вы не можете писать инструкции внутри класса, они должны быть инкапсулированы в функцию, как вы ожидаете, что они будут там? Вероятно, вы хотите поместить их в точку входа (в данном случае onCreate).
4. Спасибо!! Это то, что мне было нужно. Каков синтаксис для импорта класса?
import Destroyer.kt
?