AndroidStudio и Kotlin: что такое ошибка, ожидающая объявления участника

#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 ?