Compilatiefouten begrijpen

Compilatiefouten begrijpen

> LeekScript-zelfstudie

Je codeert je AI als een gezegende. De regels scrollen, en de namen van zeer logische variabelen en functies, zoals sfatyu_2 volgen elkaar op, het leven is goed... Plotseling ! De "save"-toets wordt ingedrukt en uw code wordt gecontroleerd door de compiler. Het ondersteunt je blik, intens... En hier is het drama! Er verschijnen een (of meer!) grote rode lijnen onderaan je editor, wat kunnen deze vreemde en esoterische magische formules betekenen?

Deze gids zal u de waarheid onthullen, zodat ook u kenners kunt worden.

Hier werd een eindverklaring verwacht

Einde instructie? Ja, het is de ";" aan het einde van elke regel. Dit bericht geeft een regel aan waar een van deze cijfers ontbreekt. Wees echter voorzichtig! de aangegeven regel is in het algemeen de regel die voorafgaat aan of volgt op de beschuldigde.

!Ontbreekt een;

Hier ontbreekt een ";" aan het einde van regel 18, en het bericht vertelt ons dat de regel voor useWeapon geen puntkomma heeft!

Fix: moveToward(vijand);

Onverwacht einde van bestand

Meer verraderlijk! Het is dezelfde fout als de vorige, maar deze keer is het de laatste regel van je AI die geen puntkomma heeft. !unexp EoF

Fix: gebruik Wapen(vijand);

Dit kan ook komen door een niet-afgesloten String: !EoF 2

Fix: zeg("Ik heb gewonnen!");

Onbekende variabele of functie

Wie is vergeten zijn variabele te declareren? Een korte terugkeer naar de tutorial over Variables en de tutorial over Functions kan nuttig zijn.

!var of func onbekend

Hier wordt de variabele 'vijand' niet gedeclareerd. U moet het eerst maken met het sleutelwoord var. Fix: var vijand = haalDichtstbijzijndevijand();

En voor deze dan? !ex onbekende functie

Nou, de auteur is gewoon een aap met een toetsenbord, en zag niet dat hij getNeerest gebruikte (wat niet bestaat) in plaats van getNearest, net hierboven verklaard.

Deze variabelenaam is niet beschikbaar

U kunt een variabele niet opnieuw declareren met dezelfde naam als een reeds gedeclareerde variabele.

![](https://imgur.com/Qx5n006.png)

Correctie (lelijk): var moi2 = 1 Een betere oplossing zou zijn om namen te gebruiken die echt overeenkomen met de rol van uw variabelen.

Waarschuwing: deze fout kan ook optreden vanwege de naam van een globale variabele.

Deze fout zal ook op u vallen als u een komma gebruikt in plaats van de gerespecteerde puntkomma: ![](https://imgur.com/cCpqtxS.png)

Fix: var vijand = haalDichtstbijzijndevijand();

Dit komt door de inline variabele declaratie: var variabele1 = 1, variabele2 = 2; is perfect geldige syntaxis (zie Variabelen).

Deze functienaam is niet beschikbaar

Net als bij de vorige fout kunt u een functienaam die al is gebruikt niet opnieuw gebruiken.

![](https://imgur.com/UUfrixR.png)

Correctie (erg lelijk): functie haalDichtstbijzijnde2() {

Kan deze parameternaam niet gebruiken

Dus we proberen de naam van een globale variabele als parameternaam te gebruiken, toch? Weet je wat het je kan kosten als je ruzie krijgt met een van mijn minder vriendelijke collega's?

![](https://imgur.com/xnAOUAV.png)

Correctie:

Haakje sluiten verwacht

Zoals de foutmelding aangeeft, mist de aangegeven regel een haakje. !fout als

Hier zou regel 19 van de code moeten zijn if (not isAlive(vijand)) {

Hier werd een waarde verwacht

Een functieaanroep niet gesloten?? Dit is wat je krijgt! !verwachte waarde

Fix moveToward(vijand);

Onjuist aantal parameters

Parameters? kzako? Een korte bespreking van de Functions tutorial is op zijn plaats!

!onjuiste parameter

Hier accepteert de moveToward-functie 1 tot 2 parameters, en we geven het 0. Het is duidelijk dat de compiler onze vingers raakt. Fix moveToward(vijand); of moveToward(vijand, mp); met mp een nummer.

Merk op dat je dezelfde foutmelding krijgt als je te veel parameters aan een functie geeft (Bijvoorbeeld: moveToward(vijand, mp, ding);).

Niet alle blokken zijn gesloten

Wat is een blok? Nou, het is een stuk code omgeven door { }. Hier openden we een blok met { zonder het te sluiten. !blokken niet gesloten

Hier ontbreekt de } na het einde van de if. De compiler geeft dus het einde van het huidige blok aan (hier het einde van het bestand) om aan te geven dat we vergeten zijn alle blokken te sluiten. Correctie:

Geen blokken om te sluiten

Deze situatie is het omgekeerde van de vorige. We sloten een blok av