Index: BasicCompiler_Common/error.cpp
===================================================================
--- BasicCompiler_Common/error.cpp	(revision 65)
+++ BasicCompiler_Common/error.cpp	(revision 75)
@@ -93,51 +93,53 @@
 	//日本語
 	////////////////////
-	if(num==1) lstrcpy(msg,"文法が間違っています");
-	if(num==2) sprintf(msg,"左のオペランドが、左辺値になっていません");
+	if(num==1) lstrcpy(msg,"文法が間違っています。");
+	if(num==2) sprintf(msg,"左のオペランドが、左辺値になっていません。");
 	//num==3は予約されています
-	if(num==4) sprintf(msg,"%sの相互関係が一致しません",tempKeyWord);
-	if(num==5) sprintf(msg,"ダブルクォートの数が一致しません");
-	if(num==6) sprintf(msg,"\"%s\" ジャンプ先が不正です",tempKeyWord);
-	if(num==7) lstrcpy(msg,"DLL名が長すぎます（拡張子を含め、16文字以下にして下さい）");
-	if(num==8) lstrcpy(msg,"コンパイラが認識できない文字コードが含まれています");
-	if(num==9) sprintf(msg,"型が違います");
-	if(num==10) sprintf(msg,"\"%s\" のパラメータ指定が間違っています",tempKeyWord);
-	if(num==11) sprintf(msg,"\"%s\" 型が違います",tempKeyWord);
-	if(num==12) sprintf(msg,"\"%s\" の使い方が不正です",tempKeyWord);
-	if(num==13) sprintf(msg,"\"%s\" を参照できません",tempKeyWord);
-	if(num==14) sprintf(msg,"\"%s\" 配列指定が不正です",tempKeyWord);
-	if(num==15) sprintf(msg,"\"%s\" はすでに定義されています",tempKeyWord);
-	if(num==16) sprintf(msg,"\"%s\" 配列、またはポインタ以外の変数に添え字が指定されています",tempKeyWord);
-	if(num==17) sprintf(msg,"リソース データが不正です");
-	if(num==18) sprintf(msg,"\"%s\"はポインタ変数型です。文字列演算を指定することはできません",tempKeyWord);
-	if(num==19) sprintf(msg,"\"%s\"は値参照型です。ByVal指定することはできません",tempKeyWord);
-	if(num==20) lstrcpy(msg,"全角スペースが含まれています（全角スペースはコンパイラが認識できないので、半角スペースまたはタブ文字にしてください）");
-	if(num==21) sprintf(msg,"If制御のブロック指定が不正です");
-	if(num==22) sprintf(msg,"\"%s\" に対する \"End %s\" が見つかりません",tempKeyWord,tempKeyWord);
-	if(num==23) sprintf(msg,"リソース ファイル \"%s\" の読み込みに失敗",tempKeyWord);
-	if(num==24) lstrcpy(msg,"Export指定の関数のパラメータには実体オブジェクトを利用することはできません（BytePtr型などを利用して下さい）");
-	if(num==27) sprintf(msg,"\"%s\" は定義されていません",tempKeyWord);
-	if(num==28) sprintf(msg,"構造体パラメータはポインタ参照にしてください(%s)",tempKeyWord);
-	if(num==29) sprintf(msg,"配列ポインタを要素と同時に引渡すときは、ポインタ参照（ByRef）にしてください");
+	if(num==4) sprintf(msg,"%sの相互関係が一致しません。",tempKeyWord);
+	if(num==5) sprintf(msg,"ダブルクォートの数が一致しません。");
+	if(num==6) sprintf(msg,"\"%s\" ジャンプ先が不正です。",tempKeyWord);
+	if(num==7) lstrcpy(msg,"DLL名が長すぎます（拡張子を含め、16文字以下にして下さい）。");
+	if(num==8) lstrcpy(msg,"コンパイラが認識できない文字コードが含まれています。");
+	if(num==9) sprintf(msg,"型が違います。");
+	if(num==10) sprintf(msg,"\"%s\" のパラメータ指定が間違っています。",tempKeyWord);
+	if(num==11) sprintf(msg,"\"%s\" 型が違います。",tempKeyWord);
+	if(num==12) sprintf(msg,"\"%s\" の使い方が不正です。",tempKeyWord);
+	if(num==13) sprintf(msg,"\"%s\" を参照できません。",tempKeyWord);
+	if(num==14) sprintf(msg,"\"%s\" 配列指定が不正です。",tempKeyWord);
+	if(num==15) sprintf(msg,"\"%s\" はすでに定義されています。",tempKeyWord);
+	if(num==16) sprintf(msg,"\"%s\" 配列、またはポインタ以外の変数に添え字が指定されています。",tempKeyWord);
+	if(num==17) sprintf(msg,"リソース データが不正です。");
+	if(num==18) sprintf(msg,"\"%s\"はポインタ変数型です。文字列演算を指定することはできません。",tempKeyWord);
+	if(num==19) sprintf(msg,"\"%s\"は値参照型です。ByVal指定することはできません。",tempKeyWord);
+	if(num==20) lstrcpy(msg,"全角スペースが含まれています（全角スペースはコンパイラが認識できないので、半角スペースまたはタブ文字にしてください）。");
+	if(num==21) sprintf(msg,"If制御のブロック指定が不正です。");
+	if(num==22) sprintf(msg,"\"%s\" に対する \"End %s\" が見つかりません。",tempKeyWord,tempKeyWord);
+	if(num==23) sprintf(msg,"リソース ファイル \"%s\" の読み込みに失敗。",tempKeyWord);
+	if(num==24) lstrcpy(msg,"Export指定の関数のパラメータには実体オブジェクトを利用することはできません（BytePtr型などを利用して下さい）。");
+	if(num==25) sprintf(msg,"DLL関数にオブジェクトを引き渡すことはできません(%s)。",tempKeyWord);
+	if(num==26) sprintf(msg,"\"%s\" 戻り値の型が指定されていません。",tempKeyWord);
+	if(num==27) sprintf(msg,"\"%s\" は定義されていません。",tempKeyWord);
+	if(num==28) sprintf(msg,"構造体パラメータは参照渡しにしてください(%s)。",tempKeyWord);
+	if(num==29) sprintf(msg,"配列ポインタを要素と同時に引渡すときは、ポインタ参照（ByRef）にしてください。");
 	//num==30は予約されています
-	if(num==31) sprintf(msg,"\"%s\" は構造体です（メンバの参照はピリオド \".\" で区切ってください）",tempKeyWord);
-	if(num==32) sprintf(msg,"\"%s\" は構造体ポインタです（メンバの参照は \"->\" で区切ってください）",tempKeyWord);
-	if(num==33) sprintf(msg,"定数式にリテラル値、または定数以外のものが含まれています");
-	if(num==34) sprintf(msg,"定数はモジュールレベルで宣言して下さい");
-	if(num==38) sprintf(msg,"\"%s\" 戻り値が存在しないプロシージャです",tempKeyWord);
-	if(num==39) sprintf(msg,"\"%s\" はオブジェクトポインタではありません（\"->\" 参照はできません）",tempKeyWord);
-	if(num==40) lstrcpy(msg,"関数の戻り値にオブジェクトを指定することはできません");
-	if(num==41) lstrcpy(msg,"初期データが不正です");
-	if(num==42) lstrcpy(msg,"閉じカッコ \")\" の後に不正な文字が含まれています");
-	if(num==43) lstrcpy(msg,"ダブルクォートの後に不正な文字が含まれています");
-	if(num==45) sprintf(msg,"実数に対して \"%s\" 演算子は利用できません",tempKeyWord);
-	if(num==46) lstrcpy(msg,"配列の添え字に整数以外の値が与えられています");
-	if(num==47) lstrcpy(msg,"As演算子の右辺値に型名以外の識別子が指定されています");
-	if(num==48) sprintf(msg,"%s演算子に対して型名が指定されています",tempKeyWord);
-	if(num==49) lstrcpy(msg,"添え字に整数以外の型が指定されています");
-	if(num==50) sprintf(msg,"%sに変換できません",tempKeyWord);
-	if(num==51) lstrcpy(msg,"オブジェクト、構造体のアラインメント値は1,2,4,8,16のいずれかでなければなりません");
-	if(num==52) sprintf(msg,"\"%s\" オーバーロードを解決できません",tempKeyWord);
-	if(num==53) sprintf(msg,"\"%s\" 出力ファイルの書き込みに失敗しました。実行されている可能性があります",tempKeyWord);
+	if(num==31) sprintf(msg,"\"%s\" は構造体です（メンバの参照はピリオド \".\" で区切ってください）。",tempKeyWord);
+	if(num==32) sprintf(msg,"\"%s\" は構造体ポインタです（メンバの参照は \"->\" で区切ってください）。",tempKeyWord);
+	if(num==33) sprintf(msg,"定数式にリテラル値、または定数以外のものが含まれています。");
+	if(num==34) sprintf(msg,"定数はモジュールレベルで宣言して下さい。");
+	if(num==38) sprintf(msg,"\"%s\" 戻り値が存在しないプロシージャです。",tempKeyWord);
+	if(num==39) sprintf(msg,"\"%s\" はオブジェクトポインタではありません（\"->\" 参照はできません）。",tempKeyWord);
+	if(num==40) lstrcpy(msg,"DLL関数の戻り値としてオブジェクトを受け取ることはできません。");
+	if(num==41) lstrcpy(msg,"初期データが不正です。");
+	if(num==42) lstrcpy(msg,"閉じカッコ \")\" の後に不正な文字が含まれています。");
+	if(num==43) lstrcpy(msg,"ダブルクォートの後に不正な文字が含まれています。");
+	if(num==45) sprintf(msg,"実数に対して \"%s\" 演算子は利用できません。",tempKeyWord);
+	if(num==46) lstrcpy(msg,"配列の添え字に整数以外の値が与えられています。");
+	if(num==47) lstrcpy(msg,"As演算子の右辺値に型名以外の識別子が指定されています。");
+	if(num==48) sprintf(msg,"%s演算子に対して型名が指定されています。",tempKeyWord);
+	if(num==49) lstrcpy(msg,"添え字に整数以外の型が指定されています。");
+	if(num==50) sprintf(msg,"%sに変換できません。",tempKeyWord);
+	if(num==51) lstrcpy(msg,"オブジェクト、構造体のアラインメント値は1,2,4,8,16のいずれかでなければなりません。");
+	if(num==52) sprintf(msg,"\"%s\" オーバーロードを解決できません。",tempKeyWord);
+	if(num==53) sprintf(msg,"\"%s\" 出力ファイルの書き込みに失敗しました。実行されている可能性があります。",tempKeyWord);
 	if(num==54) sprintf(msg,"対応する%sが存在しません。",tempKeyWord);
 	if(num==55) sprintf(msg,"\"%s\" は対応するForステートメントで利用されるカウンタ変数ではありません。",tempKeyWord);
@@ -152,27 +154,27 @@
 
 	//オブジェクト関連
-	if(num==102) sprintf(msg,"\"%s\" オブジェクトは定義されていません",tempKeyWord);
-	if(num==103) sprintf(msg,"\"%s\" メンバは定義されていません",tempKeyWord);
-	if(num==104) sprintf(msg,"\"%s\" 参照方法が違います",tempKeyWord);
-	if(num==105) sprintf(msg,"\"%s\" 自身のクラスを継承することはできません",tempKeyWord);
-	if(num==106) sprintf(msg,"\"%s\" クラスは定義されていません",tempKeyWord);
-	if(num==107) sprintf(msg,"Privateメンバ \"%s\" にアクセスすることはできません",tempKeyWord);
-	if(num==108) sprintf(msg,"Protectedメンバ \"%s\" にアクセスすることはできません",tempKeyWord);
-	if(num==109) sprintf(msg,"Privateメンバ関数 \"%s\" を呼び出すことはできません",tempKeyWord);
-	if(num==110) sprintf(msg,"Protectedメンバ関数 \"%s\" を呼び出すことはできません",tempKeyWord);
-	if(num==111) lstrcpy(msg,"InheritsはClass定義内の先頭に記述する必要があります");
-	if(num==112) sprintf(msg,"\"%s\" はクラス型ではないため、初期パラメータを指定することはできません",tempKeyWord);
-	if(num==113) sprintf(msg,"\"%s\" コンストラクタへ渡すパラメータが不正です",tempKeyWord);
-	if(num==114) lstrcpy(msg,"デストラクタはパラメータを持てません");
-	if(num==115) lstrcpy(msg,"コンストラクタ及びデストラクタは戻り値を持てません");
-	if(num==116) lstrcpy(msg,"コンストラクタ及びデストラクタはパブリックアクセスにしなければなりません");
-	if(num==117) lstrcpy(msg,"デストラクタの名前が \"~クラス名\" になっていません");
-	if(num==118) lstrcpy(msg,"参照する基底クラスが存在しません");
-	if(num==119) sprintf(msg,"\"%s\" メンバは基底クラスで定義されていません",tempKeyWord);
-	if(num==120) lstrcpy(msg,"デストラクトするオブジェクトの型が不明です");
-	if(num==121) lstrcpy(msg,"New演算子にはクラス以外の型を指定できません");
-	if(num==122) lstrcpy(msg,"Delete演算子にポインタ以外の型が指定されています");
-	if(num==123) lstrcpy(msg,"ループ継承が行われました");
-	if(num==124) lstrcpy(msg,"循環参照が行われました");
+	if(num==102) sprintf(msg,"\"%s\" オブジェクトは定義されていません。",tempKeyWord);
+	if(num==103) sprintf(msg,"\"%s\" メンバは定義されていません。",tempKeyWord);
+	if(num==104) sprintf(msg,"\"%s\" 参照方法が違います。",tempKeyWord);
+	if(num==105) sprintf(msg,"\"%s\" 自身のクラスを継承することはできません。",tempKeyWord);
+	if(num==106) sprintf(msg,"\"%s\" クラスは定義されていません。",tempKeyWord);
+	if(num==107) sprintf(msg,"Privateメンバ \"%s\" にアクセスすることはできません。",tempKeyWord);
+	if(num==108) sprintf(msg,"Protectedメンバ \"%s\" にアクセスすることはできません。",tempKeyWord);
+	if(num==109) sprintf(msg,"Privateメンバ関数 \"%s\" を呼び出すことはできません。",tempKeyWord);
+	if(num==110) sprintf(msg,"Protectedメンバ関数 \"%s\" を呼び出すことはできません。",tempKeyWord);
+	if(num==111) lstrcpy(msg,"InheritsはClass定義内の先頭に記述する必要があります。");
+	if(num==112) sprintf(msg,"\"%s\" はクラス型ではないため、初期パラメータを指定することはできません。",tempKeyWord);
+	if(num==113) sprintf(msg,"\"%s\" コンストラクタへ渡すパラメータが不正です。",tempKeyWord);
+	if(num==114) lstrcpy(msg,"デストラクタはパラメータを持てません。");
+	if(num==115) lstrcpy(msg,"コンストラクタ及びデストラクタは戻り値を持てません。");
+	if(num==116) lstrcpy(msg,"コンストラクタ及びデストラクタはパブリックアクセスにしなければなりません。");
+	if(num==117) lstrcpy(msg,"デストラクタの名前が \"~クラス名\" になっていません。");
+	if(num==118) lstrcpy(msg,"参照する基底クラスが存在しません。");
+	if(num==119) sprintf(msg,"\"%s\" メンバは基底クラスで定義されていません。",tempKeyWord);
+	if(num==120) lstrcpy(msg,"デストラクトするオブジェクトの型が不明です。");
+	if(num==121) lstrcpy(msg,"New演算子にはクラス以外の型を指定できません。");
+	if(num==122) lstrcpy(msg,"Delete演算子にポインタ以外の型が指定されています。");
+	if(num==123) lstrcpy(msg,"ループ継承が行われました。");
+	if(num==124) lstrcpy(msg,"循環参照が行われました。");
 	if(num==125) sprintf(msg,"\"%s\" は抽象クラスです。インスタンス化することはできません。",tempKeyWord);
 	if(num==126) lstrcpy(msg,"オペレータのオーバーロードをクラスの外で行うことはできません。");
@@ -186,10 +188,10 @@
 
 	//Enum関連
-	if(num==150) sprintf(msg,"\"%s\" 値が定義されていません",tempKeyWord);
-	if(num==151) sprintf(msg,"\"%s\" 列挙リストに登録されていません",tempKeyWord);
+	if(num==150) sprintf(msg,"\"%s\" 値が定義されていません。",tempKeyWord);
+	if(num==151) sprintf(msg,"\"%s\" 列挙リストに登録されていません。",tempKeyWord);
 
 	//リンカ
-	if(num==200) sprintf(msg,"\"%s\" 未解決です (リンク エラー)",tempKeyWord);
-	if(num==201) sprintf(msg,"\"%s\" の読み込みに失敗",tempKeyWord);
+	if(num==200) sprintf(msg,"\"%s\" 未解決です (リンク エラー)。",tempKeyWord);
+	if(num==201) sprintf(msg,"\"%s\" の読み込みに失敗。",tempKeyWord);
 
 	//原因不明
@@ -268,4 +270,7 @@
 	return 1;
 }
+void SetError(int ErrorNum,const string &keyWord,int pos){
+	SetError( ErrorNum, keyWord.c_str(), pos );
+}
 void SetError(int num,const char *KeyWord,int pos){
 	extern HANDLE hHeap;
@@ -523,2 +528,11 @@
 	return true;
 }
+bool CheckDifferentType( const Type &varType,const Type &calcType,const char *pszFuncName,const int ParmNum){
+	return CheckDifferentType(
+		varType.GetBasicType(),
+		varType.GetIndex(),
+		calcType.GetBasicType(),
+		calcType.GetIndex(),
+		pszFuncName,
+		ParmNum );
+}
