Last Modified: 2016/10/29 16:50:07.
Only available in Japanese text.
Kuin関連情報の個人的まとめに戻る
Kuin 1.00で表示されたコンパイルエラーをまとめています。
非公式です。
リストアップされていないコンパイルエラーに出会った方は連絡いただけると幸いです。
※リストアップしておくことで、【非公式Kuin.exe】の完成度を高める効果を期待しています。:-)
Kuinは、くいなちゃん(@kuina_ch)が考案したプログラミング言語です。
ランタイムエラー一覧もあります。 → Kuinのランタイムエラー一覧(非公式)
※分類はこのページの作者による推測です。Kuin作者に未確認。
番号 | 分類 |
---|---|
E0000- | コンパイル時の設定や環境に関係するエラー |
E1000- | 文法上の誤りがある場合のエラー |
E2000- | 文法以外の仕様上の誤りがある場合のエラー |
E9000- | Kuin.exeの完成度に起因するエラー |
番号なし | 通常のコーディングでは見られないようなエラー(?) |
番号 | メッセージ | エラーの例 | 修正例 |
---|---|---|---|
E0000 | コンパイルするソースコードが指定されていません。 .knファイルを指定してください。 | ソースファイル欄が空欄。 | ソースファイルを指定する。 |
E0001 | 不正なファイル形式です。 コンパイルするソースコードには正しい名前の.knファイルを指定してください。 | 指定したソースファイルの拡張子が .kn になっていない。 ファイル名に半角英数字とアンダーバー以外が使われている。 ファイル名の先頭が数字。 |
.knファイルを指定する。 半角英数字とアンダーバーのみで先頭に数字が来ないファイル名にする。 |
E0002 | そのファイル名は標準ライブラリで使われています。 ソースファイル名には、標準ライブラリで使われていない名前を付けてください。 | コンパイルするソースファイル名に Kuin.kn を指定。 | |
E0003 | ファイルが開けませんでした。 ファイルが存在し、開ける状態になっているか確認してください。 | ・指定したソースファイルが存在しない。 ・使われているライブラリが存在しない。 ・Kuin.exeの置いてあるフォルダにStdフォルダが存在しない。 |
・存在するソースファイルを指定する。 ・ライブラリのファイル名を正しく指定する。 ・Kuinを正しくインストールする。 |
E0004 | |||
E0005 | 不正なアイコンファイル名です。 .icoファイルを正しく指定してください。 | ・アイコンファイル欄に指定したファイルが存在しない。 ・.icoでない拡張子のファイル名を指定。 |
|
E0006 | ファイルの書き込みに失敗しました。書き込み先のファイルが既にオープンされていないか確認してください。 | ・出力する exeファイル が開かれている。 ・出力する exeファイル が読み取り専用になっている。 ・Rlsという名前のファイルが存在する状態でリリースコンパイル。 |
・実行中の exeファイル を閉じる。 ・出力する exeファイルの[読み取り専用]属性を外す。 ・Rlsという名前のファイルを削除orリネームしておく。 |
E0007 | 不正なアイコンファイル形式です。 正しいアイコンファイルかどうか確認してください。 | 指定した.icoファイルの中身が、icoファイル形式になっていない。 | |
E0008 | 標準ライブラリが見つかりません。 ドキュメントを確認し、正しくインストールしてください。 | Std\Kuin.knの _Init() の定義を削除した状態でコンパイル。 | Stdフォルダ内のファイルは編集しないようにしましょう! |
E0009 | Kuinのシステムファイルが見つかりません。 ドキュメントを確認し、正しくインストールしてください。 | KuinのインストールディレクトリにStd\Deploy\GBerry.kndがなく、ソースコードの置いてあるフォルダにData\GBerry.kndが存在しない状態でコンパイル | Deployフォルダを削除・改変しないようにしましょう。 |
E0010 |
番号 | メッセージ | エラーの例 | 修正例 |
---|---|---|---|
E1000 | 構文エラーです。 正しい文法になっているか確認してください。 | ・行末に不要な「;(セミコロン)」 ・class c()の括弧忘れ ・?(,)の ?と(の間にスペースを入れてしまっている。 ・breakやcontinueの後にブロック名忘れ。 ・その他 |
Kuinの構文をKuinの拡張バッカス・ナウア記法 (非公式)などで確認して修正してください。 |
E1002 | クラスの定義が end class によって閉じられていません。 | class C() | class C() end class |
E1003 | 関数以外のクラス内要素は、オーバーライドできません。 |
func Main()
class c()
+var a
end class
end func
|
func Main() class c() var a end class end func |
E1004 | 関数・変数以外のクラス内要素は、プライベートにできません。 |
func Main()
class c()
-const n: int :: 1
end class
end func
|
func Main() class c() const n: int :: 1 end class end func |
E1005 | 列挙体の定義が end enum 以外で閉じられています。 |
func Main()
enum e
end func
end func
|
func Main()
enum e
end enum
end func
|
E1006 | 列挙体の定義が end enum によって閉じられていません。 | enum E | enum E end enum |
E1007 | 不正な数値表現です。 正しい文法になっているか確認してください。 | ・2#3 ・1.ToStr() |
・※2進数は0か1しか使えません。 ・1 .ToStr() {.の前に空白} |
E1008 | 不正な基数です。 基数は10を除く2~36の値でなければなりません。 | 1#11 | 2#11 |
E1009 | 引数、グローバル変数、メンバ変数に初期値は指定できません。 | var n: int :: 0 {※ローカルスコープであれば問題ありません} |
|
E1010 | 定数の値が指定されていません。 | const n: int | const n: int :: 1 |
E1011 | ブロック等の定義が end によって閉じられていません。 | func Main() | func Main() end func |
E1012 | 不明な文やブロックの定義です。 |
func Main()
f() {doを忘れている}
func f()
end func
end func
|
func Main()
do f()
func f()
end func
end func
|
E1013 | ブロック等の定義と end が対応していません。 | ブロックの開始はあるけれど終わりがない。 (ifブロックのend ifを忘れている。) |
|
E1014 | ifブロックの構文エラーです。 正しい文法になっているか確認してください。 | func Main() if(true) else {elseが2つ以上ある} else end if end func |
func Main()
if(true)
elif(true)
else
end if
end func
|
E1015 | ifブロック以外で elif が記述されました。 |
func Main()
elif(true)
end if
end func
|
func Main()
if(true)
end if
end func
|
E1016 | ifブロック以外で else が記述されました。 |
func Main()
ifdef(rls)
else
end ifdef
end func
|
func Main() ifdef(rls) end ifdef ifdef(dbg) end ifdef end func |
E1017 | switchブロックの構文エラーです。 正しい文法になっているか確認してください。 | func Main() switch(1) {switchの直後、case節の前に文がある} do Dbg@Log("switch") case(1) end switch end func |
func Main() {switchの手前に書けば問題なし} do Dbg@Log("switch") switch(1) case(1) end switch end func |
E1018 | switchブロック以外で case が記述されました。 |
func Main()
if (true)
case
end if
end func
|
func Main()
if (true)
else
end if
end func
|
E1019 | switchブロック以外で default が記述されました。 |
func Main()
if (true)
default
end if
end func
|
func Main()
if (true)
else
end if
end func
|
E1020 | whileブロックの構文エラーです。 正しい文法になっているか確認してください。 |
func Main()
while(true, true)
end while
end func
|
func Main()
while(true, skip)
end while
end func
|
E1021 | tryブロックの構文エラーです。 正しい文法になっているか確認してください。 |
func Main()
try
finally
finally
end try
end func
|
func Main() try finally end try end func |
E1022 | tryブロック以外で catch が記述されました。 |
func Main()
if(true)
catch
end if
end func
|
func Main()
if(true)
else
end if
end func
|
E1023 | tryブロック以外で finally が記述されました。 |
func Main()
if(true)
finally
end if
end func
|
func Main()
if(true)
else
end if
end func
|
E1024 | ifdefの条件に dbg および rls 以外が指定されました。 |
func Main()
ifdef(true)
end ifdef
end func
|
func Main()
ifdef(rls)
end ifdef
end func
|
E1025 | 文字リテラルに空もしくは2文字以上は指定できません。 | const a: char :: '' | const a: char :: 'a' |
E1026 | 括弧が ) で閉じられていません。 | func Main() var a: int :: (1 ) {途中の改行はNG} end func |
func Main()
var a: int :: (1)
end func
|
E1027 | コメントが } で閉じられていません。 | {{ } ←コメントはネストされます。 { "}" ←文字列中の}ではコメントは終了しません。 |
{{ }} { "}"} |
E1028 | 文字および文字列リテラルの途中で改行してはなりません。 | const str: []char :: "Hello World!! " {途中の改行はNG} コメント中に ' や "を単独で書いた場合もこのエラー。 |
const str: []char :: "Hello World!!" |
E1029 | 長すぎる識別子です。 64文字を超える名前は付けられません。 | const Looooo...ooooongNameNumber: int :: 1 | 識別子名を64字以内にする。 |
E1030 | その識別子は予約語です。 予約語で定義されている名前は付けられません。 | const block: int :: 4 | const block_: int :: 4 |
E1031 | その識別子は既に定義されています。 同じスコープ内で名前が重複してはなりません。 | var n: int var n: char |
var n: int var c: char |
E1032 | 不正なエスケープシーケンスです。 | const a: char :: '\0' | const a: char :: 0 $char {※おそらく、\n \t \" \' \\ \w 以外使えません} |
E1033 | 全角スペースを使用してはなりません。 文字列中で使用したいときは \w を用いてください。 | { } | {コメント中でも全角スペースは使えないようです} |
E1034 | 文字および文字列リテラル中にタブ文字を使用してはなりません。 \t を用いてください。 | const str: []char :: " " |
const str: []char :: "\t" |
E1035 |
番号 | メッセージ | エラーの例 | 修正例 |
---|---|---|---|
E2000 | 未定義の識別子です。 識別子が存在するか確認し、正しい名前を指定してください。 |
const Answer: int :: 42
func Main()
{グローバル変数に@付け忘れ}
do Dbg@Log(Answer.ToStr())
end func
|
const Answer: int :: 42
func Main()
do Dbg@Log(@Answer.ToStr())
end func
|
E2001 | Init関数の定義が間違っています。 func Init(cfg: Kuin@CCfg) としてください。 | func Init() end func |
func Init(cfg: Kuin@CCfg) end func |
E2002 | Main関数の定義が間違っています。 func Main() としてください。 | func Main(): int end func |
func Main() end func |
E2003 | Free関数の定義が間違っています。 func Free() としてください。 | func Free(): int end func |
func Free() end func |
E2004 | Err関数の定義が間違っています。 func Err(excpt: Kuin@CExcpt) としてください。 | func Err() end func |
func Err(excpt: Kuin@CExcpt) end func |
E2005 | 自身のソースのグローバル要素を参照するときは、@ の前のソースファイル名を省略しなければなりません。 |
const N: int :: 1
func Main()
do Dbg@Log(test@N.ToStr())
end func
|
const N: int :: 1 func Main() do Dbg@Log(@N.ToStr()) end func |
E2006 | 他のソースのプライベートな要素を参照しました。 |
func Main()
{_Init()は、Kuin.knで-funcで定義されています。}
do Kuin@_Init()
end func
|
|
E2007 | 型が一致しません。 キャストなどを用いて正しい型に変換してください。 | func Main() var n: int :: 1 var f: float :: n end func |
{Kuinでは型が厳密に扱われます。} func Main() var n: int :: 1 var f: float :: n$ float end func(2016/03/21追記: class内で、同class内のメソッドを呼び出す際の【me.】忘れでもこのエラーが出ました。(Kuin ver1.01)) |
E2008 | 値が型の有効範囲外になりました。 演算結果がオーバーフローしていないかなど確認してください。 |
func Main()
const n: int :: 9223372036854775808
do Dbg@Log(n.ToStr())
end func
|
※intの範囲は、-9223372036854775808 ~ 9223372036854775807です。 (-2^63 ~ 2^63 - 1) -16#8000000000000000 ~ 16#7fffffffffffffff |
E2009 | 変数の初期値はコンパイル時に定数にできる必要があります。 | func Main() var b: int :: 1 const a: int :: b + 1 do Dbg@Log(a.ToStr()) end func |
func Main() const b: int :: 1 const a: int :: b + 1 do Dbg@Log(a.ToStr()) end func |
E2010 | 不正な左辺値です。 代入式の左辺や:$演算子の両辺は、代入可能な変数でなければなりません。 |
func Main()
do 1 :: 1
end func
|
func Main()
var n: int
do n :: 1
end func
|
E2011 | 参照先が存在しません。 正しいメンバ名が指定されているか確認してください。 |
func Main()
do Dbg@Log('A'.Tostr())
end func
{whileのブロック名に代入した場合もこのエラー}
|
func Main()
do Dbg@Log('A'.ToStr())
end func
|
E2012 | 関数でないものを関数呼び出ししようとしました。 | func Main() do 1() end func |
func Main() do f() func f() end func end func |
E2013 | 引数の参照渡し指定が一致しません。 参照渡しするときは & を付ける必要があります。 |
func Main()
var n: int
do f(n)
func f(x: &int)
end func
end func
|
func Main() var n: int do f(&n) func f(x: &int) end func end func |
E2014 | 値を参照渡ししようとしました。 参照渡しできるのは変数だけです。 | func Main() const n: int :: 0 do f(&n) func f(x: &int) end func end func |
func Main() var n: int do f(&n) func f(x: &int) end func end func |
E2015 | 配列でないものを配列参照しようとしました。 |
func Main()
var a: int
do a[0] :: 1
end func
|
func Main() var a: int do a :: 1 end func |
E2016 | プライベートなメンバを参照しました。 |
func Main()
class c()
-var a: int
end class
do Dbg@Log((#c).a.ToStr())
end func
|
func Main() class c() var a: int end class do Dbg@Log((#c).a.ToStr()) end func |
E2017 | オーバーライドする親クラスのメンバが見つかりません。 |
func Main()
class C1()
end class
class C2(C1)
+func f()
end func
end class
do (#C2).f()
end func
| func Main() class C1() func f() end func end class class C2(C1) +func f() end func end class do (#C2).f() end func |
E2018 | 親クラスとメンバ名が重複しています。 オーバーライドする場合は + を付けてください。 | func Main() class C() func Dtor() do Dbg@Log("Destructor is called.") end func end class var c: C :: #C end func |
{デストラクタはルートクラスであるKuin@CClassで定義済みなので、オーバーライドになります。}
func Main() class C() +func Dtor() {funcの手前に+でオーバーライド} do Dbg@Log("Destructor is called.") end func end class var c: C :: #C end func |
E2019 | 不正なオーバーライドです。 親クラスと定義が一致しているか確認してください。 | func Main() class C1() func f() end func end class class C2(C1) -+func f() {継承元のf()には「-」がない} end func end class do (#C2).f() end func |
func Main()
class C1()
func f()
end func
end class
class C2(C1)
+func f() {引数や戻り値の型も一致}
end func
end class
do (#C2).f()
end func
2016/03/21追記: 引数の識別子も統一する必要があるようです(Kuin 1.01)。ただし、引数の型は継承されている型なら多分OK。
|
E2020 | クラスの継承が循環しています。 | func Main() var c: C1 :: #C1 class C1(C2) end class class C2(C1) end class end func |
|
E2021 | |||
E2022 | 列挙体の値が int型の有効範囲を超えました。 | func Main() do Dbg@Log((e#a $int) .ToStr()) enum e a :: 16#7fffffffffffffff b {このbの値がintの有効範囲を超えてしまう} end enum end func |
|
E2023 | 列挙体の値はコンパイル時に定数にできる int型の値でなければなりません。 | func Main() var n: int :: 1 enum e a :: n end enum do Dbg@Log((e#a$ int).ToStr()) end func |
func Main() const n: int :: 1 enum e a :: n end enum do Dbg@Log((e#a$ int).ToStr()) end func |
E2024 | 列挙体の値が重複しています。 |
func Main()
enum e
a {enum要素の先頭の値は、省略時=>0}
b :: 0
end enum
do Dbg@Log((e#a$ int).ToStr())
end func
|
func Main() enum e a :: -1 b end enum do Dbg@Log((e#a$ int).ToStr()) end func |
E2025 | 条件式は bool型でなければなりません。 |
func Main()
assert 0
end func
|
func Main()
assert false
end func
|
E2026 | switchブロックで扱う値は、比較可能な型でなければなりません。 | func Main() const str: []char :: null switch(str) case(null) do Dbg@Log("null!!") end switch end func |
func Main() var str: []char :: null switch s(str) default if(s =& null) do Dbg@Log("null!!") end if end switch end func |
E2027 | caseの条件値はコンパイル時に定数にできる必要があります。 | func Main() var n: int :: 1 switch(1) case(n) end switch end func |
func Main() const n: int :: 1 switch(1) case(n) end switch end func |
E2028 | forブロックの初期値は int型でなければなりません。 |
func Main()
for(0.5, 9)
end for
end func
|
func Main()
for(0, 9)
end for
end func
|
E2029 | forブロックの終値は int型でなければなりません。 |
func Main()
for(0, 9.5)
end for
end func
|
func Main()
for(0, 9)
end for
end func
|
E2030 | forブロックの増減値は int型でなければなりません。 |
func Main()
for(9, 0, false)
end for
end func
|
func Main()
for(9, 0, -1)
end for
end func
|
E2031 | forブロックの増減値はコンパイル時に定数に出来る必要があります。 | func Main() var n: int :: 1 for(9, 0, n) end for end func |
func Main() const n: int :: 1 for(9, 0, n) end for end func |
E2032 | forブロックの増減値は 0であってはなりません。 |
func Main()
for(9, 0, 0)
end for
end func
|
func Main()
for(9, 0, -1)
end for
end func
|
E2033 | foreachブロックで扱えない型が指定されました。 |
func Main()
foreach(0)
end foreach
end func
|
{foreachブロックでは、配列やリストなどが扱えます。} |
E2034 | catchの条件値はコンパイル時に定数にできる int型の値でなければなりません。 | func Main() var n: int :: 1 try catch (n) end try end func |
func Main() const n: int :: 1 try catch (n) end try end func |
E2035 | throw文の例外コードは int型でなければなりません。 |
func Main()
throw true
end func
|
func Main()
throw 1
end func
|
E2036 | throw文の例外メッセージは []char型でなければなりません。 |
func Main()
throw 1, true
end func
|
func Main()
throw 1, "Error 1"
end func
|
E2037 | do文が副作用のない演算で終わりました。 do文で最後に行う演算は ::演算子や関数呼び出し等でなければなりません。 |
func Main()
do 1
end func
|
|
E2038 | break文にブロック以外が指定されました。 | func Main() var a: int break a end func |
|
E2039 | continue文にループブロック以外が指定されました。 |
func Main()
while a()
if b(true)
continue b
end if
end while
end func
|
func Main()
while a()
if b(true)
continue a
end if
end while
end func
|
E2040 | 型を指定すべきところに型以外が指定されました。 |
func Main()
func f(n: n)
end func
do f(1)
end func
|
func Main()
func f(n: int)
end func
do f(1)
end func
|
E2041 |
番号 | メッセージ | エラーの例 |
---|---|---|
E9998 | 現在のバージョンでは未実装の機能です。 次期リリースにご期待ください。 | {2013/09/28時点でE9998になるコード} {クラスの値比較} func Main() class c() end class if(#c = #c) end if end func {2013/09/28時点でE9998になるコード} {配列の値比較} func Main() if(#[0]int = #[0]int) end if end func {2013/09/28時点でE9998になるコード} {case条件に[]char以外の配列型} func Main() class c() end class switch(#[0]int) case(#[0]int) end switch end func |
E9999 | 予期せぬエラーが発生しました。 コンパイラのバグである可能性が高いです。 開発者に問い合わせてください。 | {2013/09/28時点でE9999になるコード} {※意味解析までは問題ありません。} {[コンパイル&実行]でエラーになります。} {Kuin 1.01ではエラーになりません。} func Main() var lStream: File@CLoadStream :: File@LoadFileStream("./test.txt") var buf: []byte8 :: lStream.Read(10) {E9999} end func {2013/09/28時点でE9999になるコード} {Kuin 1.01ではエラーになりません。} func Main() class c() end class switch(#c) case(#c) end switch end func {2016/03/29時点でE9999になるコード} func Main() var a: c :: #c class c() var s: Snd@CSnd end class end func |
該当の行番号も表示されず、解析が難しいのが特徴です。
メッセージ | エラーの例 |
---|---|
同じ名前のファイルまたはディレクトリが既に存在するため、"C:\~\Data" を作成できません。 | Data という名前のファイルが存在する状態で[コンパイル&実行]。 ※意味解析までは問題ありません。 |
同じ名前のファイルまたはディレクトリが既に存在するため、"C:\~\Res" を作成できません。 | Res という名前のファイルが存在する状態で[リリースコンパイル]にチェックを入れて、[コンパイル&実行]。 ※意味解析までは問題ありません。 |
同じ名前のファイルまたはディレクトリが既に存在するため、"C:\~\Save" を作成できません。 | Save という名前のファイルが存在する状態で[リリースコンパイル]のチェックを外して、[コンパイル&実行]。 ※意味解析までは問題ありません。 |
Error: インデックスが配列の境界外です。 | 2016/03/27調査中です。 2016/03/27追記: 以下のコードで発生します。(Kuin 1.01で発生。Kuin 1.00には存在しなかった不具合だと思います。) func Main() var a: c :: (#c) class c() var f: func>()< func temp() do me.f() end func end class end func 2016/03/27さらに追記: 引数が0個ではなく1個だとコンパイルできることがわかりました。 以下のコードではコンパイル出来ます。 実行も問題ありません。 func Main() var a: c :: (#c) class c() var f: func>(int)< func temp() do me.f(1) end func end class end func |
Error: オブジェクト参照がオブジェクト インスタンスに設定されていません。 | func Main() do Snd@Load("test.ogg") {※ do LoadTex@Load("")など、オブジェクトを返す他の関数でも同様です。} end func |
Error: 型 'Kuin.CASTExpr1' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: +a
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExpr2' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: a + a
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExpr3' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: a ?(1,1)
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExprAs' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: a$ int
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExprCall' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: a()
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExprArray' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: a[1]
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExprDot' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: a.a
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExprRef' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: a
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExprValueArray' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: [a]int
do Dbg@Log(a.ToStr())
end func
|
Error: 型 'Kuin.CASTExprNewArray' のオブジェクトを型 'Kuin.CASTExprValue' にキャストできません。 |
func Main()
const a: int :: #[a]int
do Dbg@Log(a.ToStr())
end func
|
Copyright (C) Tatt(タット) ---- Twitterアカウント @tatt61880