Index: BasicCompiler_Common/Class.cpp
===================================================================
--- BasicCompiler_Common/Class.cpp	(revision 140)
+++ BasicCompiler_Common/Class.cpp	(revision 141)
@@ -22,5 +22,5 @@
 	, classType( Class )
 	, pobj_InheritsClass( NULL )
-	, vtbl_num( 0 )
+	, vtblNum( 0 )
 	, iAlign( 0 )
 	, vtbl_offset( -1 )
@@ -90,13 +90,10 @@
 		const CClass *pInheritsClass = pobj_DBClass->Find(temporary);
 		if( !pInheritsClass ){
-			SetError(106,temporary,i);
+			SetError(106,temporary,nowLine);
 			return false;
 		}
 
 		if( pInheritsClass->IsInterface() ){
-			// インターフェイスを継承する
-			if( !InheritsInterface( *pInheritsClass, nowLine ) ){
-				return false;
-			}
+			// インターフェイスはあとで継承する
 		}
 		else if( pInheritsClass->IsClass() ){
@@ -127,7 +124,46 @@
 		}
 
-		if( !InheritsClass( *pObjectClass, i ) ){
+		if( !InheritsClass( *pObjectClass, nowLine ) ){
 			return false;
 		}
+	}
+
+	i=0;
+	while( true ){
+
+		char temporary[VN_SIZE];
+		for( int i2=0;; i++, i2++ ){
+			if( inheritNames[i] == '\0' || inheritNames[i] == ',' ){
+				temporary[i2] = 0;
+				break;
+			}
+			temporary[i2] = inheritNames[i];
+		}
+
+		//継承元クラスを取得
+		const CClass *pInheritsClass = pobj_DBClass->Find(temporary);
+		if( !pInheritsClass ){
+			SetError(106,temporary,nowLine);
+			return false;
+		}
+
+		if( pInheritsClass->IsInterface() ){
+			// インターフェイスを継承する
+			if( !InheritsInterface( *pInheritsClass, nowLine ) ){
+				return false;
+			}
+		}
+		else if( pInheritsClass->IsClass() ){
+			// クラスはさっき継承した
+		}
+		else{
+			SetError(135,NULL,nowLine);
+			return false;
+		}
+
+		if( inheritNames[i] == '\0' ){
+			break;
+		}
+		i++;
 	}
 
@@ -189,5 +225,5 @@
 
 	//仮想関数の数
-	vtbl_num += inheritsClass.vtbl_num;
+	AddVtblNum( inheritsClass.GetVtblNum() );
 
 	//継承先のクラスをメンバとして保持する
@@ -235,8 +271,8 @@
 	}
 
-	interfaces.push_back( InheritedInterface( const_cast<CClass *>(&inheritsInterface), vtbl_num ) );
+	interfaces.push_back( InheritedInterface( const_cast<CClass *>(&inheritsInterface), vtblNum ) );
 
 	//仮想関数の数
-	vtbl_num += inheritsInterface.vtbl_num;
+	AddVtblNum( inheritsInterface.GetVtblNum() );
 
 	return true;
@@ -308,9 +344,8 @@
 int CClass::GetMemberOffset( const char *memberName, int *pMemberNum ) const
 {
-	int i2,offset;
+	int i2;
 
 	//仮想関数が存在する場合は関数リストへのポインタのサイズを追加
-	if(vtbl_num) offset=PTR_SIZE;
-	else offset=0;
+	int offset = IsExistVirtualFunctions() ? PTR_SIZE : 0;
 
 	int alignment;
@@ -381,10 +416,9 @@
 int CClass::GetAlignment() const
 {
-	int alignment,member_size;
-
-	if(vtbl_num) alignment=PTR_SIZE;
-	else alignment=0;
+	//仮想関数が存在する場合は関数リストへのポインタのサイズを追加
+	int alignment = IsExistVirtualFunctions() ? PTR_SIZE : 0;
 
 	BOOST_FOREACH( CMember *pMember, dynamicMembers ){
+		int member_size;
 		if(pMember->GetType().IsStruct()){
 			//メンバクラスのアラインメントを取得
@@ -431,5 +465,5 @@
 
 	UserProc **ppsi;
-	ppsi=(UserProc **)HeapAlloc(hHeap,0,vtbl_num*sizeof(GlobalProc *));
+	ppsi=(UserProc **)HeapAlloc(hHeap,0,GetVtblNum()*sizeof(GlobalProc *));
 
 	//関数テーブルに値をセット
@@ -452,7 +486,7 @@
 	}
 
-	vtbl_offset=dataTable.AddBinary((void *)ppsi,vtbl_num*sizeof(LONG_PTR));
-
-	for( int i=0; i < vtbl_num; i++ ){
+	vtbl_offset=dataTable.AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR));
+
+	for( int i=0; i < GetVtblNum(); i++ ){
 		pobj_Reloc->AddSchedule_DataSection(vtbl_offset+i*sizeof(LONG_PTR));
 	}
@@ -469,5 +503,5 @@
 
 	int i;
-	for(i=0;i<vtbl_num;i++){
+	for(i=0;i<GetVtblNum();i++){
 		GlobalProc *pUserProc;
 		pUserProc=(GlobalProc *)pVtbl[i];
@@ -938,5 +972,5 @@
 
 	if( isVirtual ){
-		pobj_c->vtbl_num++;
+		pobj_c->AddVtblNum( 1 );
 	}
 
@@ -1081,5 +1115,5 @@
 
 				//仮想関数の数を初期化
-				pobj_c->vtbl_num=0;
+				pobj_c->SetVtblNum( 0 );
 			}
 Interface_InheritsError:
@@ -1214,5 +1248,5 @@
 
 				// 仮想関数の数を初期化
-				pobj_c->vtbl_num = 0;
+				pobj_c->SetVtblNum( 0 );
 			}
 			else{
