Index: BasicCompiler_Common/Class.cpp
===================================================================
--- BasicCompiler_Common/Class.cpp	(revision 130)
+++ BasicCompiler_Common/Class.cpp	(revision 131)
@@ -102,5 +102,5 @@
 		foreach( CMember *member, objClass.staticMembers ){
 			char temporary[VN_SIZE];
-			sprintf(temporary,"%s.%s",objClass.name,member->name);
+			sprintf(temporary,"%s.%s",objClass.GetName().c_str(),member->name);
 			dim(
 				temporary,
@@ -151,6 +151,6 @@
 
 
-CClass::CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name )
-	: namespaceScopes( namespaceScopes )
+CClass::CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name )
+	: Prototype( namespaceScopes, name )
 	, importedNamespaces( importedNamespaces )
 	, ConstructorMemberSubIndex( 0 )
@@ -168,12 +168,7 @@
 	, pobj_NextClass( NULL )
 {
-	this->name=(char *)HeapAlloc(hHeap,0,lstrlen(name)+1);
-	lstrcpy(this->name,name);
 }
 CClass::~CClass(){
 	int i;
-
-	//クラス名
-	HeapDefaultFree(name);
 
 	if(ppobj_Member){
@@ -202,4 +197,14 @@
 }
 
+bool CClass::IsInheritsInterface( const CClass *pInterfaceClass ) const
+{
+	BOOST_FOREACH( const InheritedInterface &objInterface, interfaces ){
+		if( pInterfaceClass == &objInterface.GetInterfaceClass() ){
+			return true;
+		}
+	}
+	return false;
+}
+
 bool CClass::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const
 {
@@ -253,9 +258,70 @@
 }
 
-bool CClass::Inherits( const CClass &inheritsClass, int nowLine ){
+bool CClass::Inherits( const char *inheritNames, int nowLine ){
+	int i = 0;
+	bool isInheritsClass = false;
+	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,i);
+			return false;
+		}
+
+		if( pInheritsClass->IsInterface() ){
+			// インターフェイスを継承する
+			if( !InheritsInterface( *pInheritsClass, nowLine ) ){
+				return false;
+			}
+		}
+		else if( pInheritsClass->IsClass() ){
+			// クラスを継承する
+			isInheritsClass = true;
+
+			if( !InheritsClass( *pInheritsClass, nowLine ) ){
+				return false;
+			}
+		}
+		else{
+			SetError(135,NULL,nowLine);
+			return false;
+		}
+
+		if( inheritNames[i] == '\0' ){
+			break;
+		}
+		i++;
+	}
+
+	if( !isInheritsClass ){
+		// クラスを一つも継承していないとき
+		const CClass *pObjectClass = pobj_DBClass->Find("Object");
+		if( !pObjectClass ){
+			SetError(106,"Object",i);
+			return false;
+		}
+
+		if( !InheritsClass( *pObjectClass, i ) ){
+			return false;
+		}
+	}
+
+	return true;
+}
+bool CClass::InheritsClass( const CClass &inheritsClass, int nowLine ){
 
 	//ループ継承でないかをチェック
 	if(pobj_LoopRefCheck->check(inheritsClass)){
-		SetError(123,inheritsClass.name,nowLine);
+		SetError(123,inheritsClass.GetName(),nowLine);
 		return false;
 	}
@@ -263,7 +329,7 @@
 	if( inheritsClass.ppobj_Member == 0 ){
 		//継承先が読み取られていないとき
-		pobj_LoopRefCheck->add(this->name);
-		pobj_DBClass->GetClass_recur(inheritsClass.name);
-		pobj_LoopRefCheck->del(this->name);
+		pobj_LoopRefCheck->add(this->GetName().c_str());
+		pobj_DBClass->GetClass_recur(inheritsClass.GetName().c_str());
+		pobj_LoopRefCheck->del(this->GetName().c_str());
 	}
 
@@ -317,5 +383,5 @@
 	//ループ継承でないかをチェック
 	if(pobj_LoopRefCheck->check(inheritsInterface)){
-		SetError(123,inheritsInterface.name,nowLine);
+		SetError(123,inheritsInterface.GetName(),nowLine);
 		return false;
 	}
@@ -323,7 +389,7 @@
 	if( inheritsInterface.ppobj_Member == 0 ){
 		//継承先が読み取られていないとき
-		pobj_LoopRefCheck->add(this->name);
-		pobj_DBClass->GetClass_recur(inheritsInterface.name);
-		pobj_LoopRefCheck->del(this->name);
+		pobj_LoopRefCheck->add(this->GetName().c_str());
+		pobj_DBClass->GetClass_recur(inheritsInterface.GetName().c_str());
+		pobj_LoopRefCheck->del(this->GetName().c_str());
 	}
 
@@ -348,12 +414,8 @@
 	}
 
+	interfaces.push_back( InheritedInterface( const_cast<CClass *>(&inheritsInterface), vtbl_num ) );
+
 	//仮想関数の数
 	vtbl_num += inheritsInterface.vtbl_num;
-
-	/*
-	TODO: インターフェイス向けの機構を作る
-	//継承先のクラスをメンバとして保持する
-	pobj_InheritsClass = &inheritsInterface;
-	*/
 
 	return true;
@@ -404,5 +466,5 @@
 	//メンバ
 	for( int i=0;i<iMemberNum;i++){
-		if(lstrcmp(name,ppobj_Member[i]->name)==0){
+		if( GetName() == ppobj_Member[i]->name ){
 			return 1;
 		}
@@ -411,5 +473,5 @@
 	//静的メンバ
 	foreach( CMember *member, staticMembers ){
-		if( lstrcmp( name, member->name ) == 0 ){
+		if( GetName() == member->name ){
 			return 1;
 		}
@@ -1066,5 +1128,5 @@
 	BOOL fConstructor=0,bDestructor=0;
 
-	if(lstrcmp(temporary,pobj_c->name)==0){
+	if(lstrcmp(temporary,pobj_c->GetName().c_str())==0){
 		//コンストラクタの場合
 
@@ -1077,5 +1139,5 @@
 	else if(temporary[0]=='~'){
 		//デストラクタの場合はその名前が正しいかチェックを行う
-		if(lstrcmp(temporary+1,pobj_c->name)!=0)
+		if(lstrcmp(temporary+1,pobj_c->GetName().c_str())!=0)
 			SetError(117,NULL,nowLine);
 		else
@@ -1170,14 +1232,14 @@
 			if(pobj_LoopRefCheck->check(pMember->GetClass())){
 				extern int cp;
-				SetError(124,pMember->GetClass().name,cp);
+				SetError(124,pMember->GetClass().GetName(),cp);
 				return 0;
 			}
 
-			pobj_LoopRefCheck->add(objClass.name);
+			pobj_LoopRefCheck->add(objClass.GetName().c_str());
 
 			i2=MemberVar_LoopRefCheck(pMember->GetClass());
 			if(bRet==1) bRet=i2;
 
-			pobj_LoopRefCheck->del(objClass.name);
+			pobj_LoopRefCheck->del(objClass.GetName().c_str());
 		}
 	}
@@ -1243,5 +1305,5 @@
 
 			if(lpszInheritsClass){
-				if(lstrcmp(lpszInheritsClass,pobj_c->name)!=0){
+				if(lstrcmp(lpszInheritsClass,pobj_c->GetName().c_str())!=0){
 					//継承先先読み用
 					continue;
@@ -1271,5 +1333,5 @@
 				}
 
-				if(lstrcmpi(temporary,pobj_c->name)==0){
+				if(lstrcmpi(temporary,pobj_c->GetName().c_str())==0){
 					SetError(105,temporary,i);
 					goto Interface_InheritsError;
@@ -1284,5 +1346,5 @@
 
 				//継承させる
-				if( !pobj_c->InheritsInterface( *pInheritsClass, i ) ){
+				if( !pobj_c->InheritsClass( *pInheritsClass, i ) ){
 					goto Interface_InheritsError;
 				}
@@ -1394,5 +1456,5 @@
 
 			if(lpszInheritsClass){
-				if(lstrcmp(lpszInheritsClass,pobj_c->name)!=0){
+				if( pobj_c->GetName() != lpszInheritsClass ){
 					//継承先先読み用
 					continue;
@@ -1418,10 +1480,10 @@
 			else dwAccess=ACCESS_PUBLIC;
 
-			if( lstrcmp( pobj_c->name, "Object" ) == 0 || dwClassType == ESC_TYPE ){
-				//継承無し
-				pobj_c->pobj_InheritsClass=0;
-
-				//仮想関数の数を初期化
-				pobj_c->vtbl_num=0;
+			if( pobj_c->GetName() == "Object" || dwClassType == ESC_TYPE ){
+				// 継承無し
+				pobj_c->pobj_InheritsClass = NULL;
+
+				// 仮想関数の数を初期化
+				pobj_c->vtbl_num = 0;
 			}
 			else{
@@ -1439,5 +1501,5 @@
 					}
 
-					if(lstrcmpi(temporary,pobj_c->name)==0){
+					if(lstrcmpi(temporary,pobj_c->GetName().c_str())==0){
 						SetError(105,temporary,i);
 						goto InheritsError;
@@ -1450,28 +1512,5 @@
 				}
 
-				//継承元クラスを取得
-				const CClass *pInheritsClass = Find(temporary);
-				if( !pInheritsClass ){
-					SetError(106,temporary,i);
-					goto InheritsError;
-				}
-
-				if( pInheritsClass->IsInterface() ){
-					// クラスを継承していないとき
-					const CClass *pObjectClass = Find("Object");
-					if( !pObjectClass ){
-						SetError(106,"Object",i);
-						goto InheritsError;
-					}
-
-					if( !pobj_c->Inherits( *pObjectClass, i ) ){
-						goto InheritsError;
-					}
-				}
-
-				//継承させる
-				if( !pobj_c->Inherits( *pInheritsClass, i ) ){
-					goto InheritsError;
-				}
+				pobj_c->Inherits( temporary, i );
 			}
 InheritsError:
@@ -1596,5 +1635,5 @@
 							if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass().ppobj_Member==0){
 								//参照先が読み取られていないとき
-								GetClass_recur(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass().name);
+								GetClass_recur(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass().GetName().c_str());
 							}
 						}
@@ -1603,10 +1642,10 @@
 						if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->IsStruct()){
 							//循環参照のチェック
-							pobj_LoopRefCheck->add(pobj_c->name);
+							pobj_LoopRefCheck->add(pobj_c->GetName().c_str());
 							if(!MemberVar_LoopRefCheck(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass())){
 								//エラー回避
 								pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->SetBasicType( DEF_PTR_VOID );
 							}
-							pobj_LoopRefCheck->del(pobj_c->name);
+							pobj_LoopRefCheck->del(pobj_c->GetName().c_str());
 						}
 					}
@@ -1709,8 +1748,8 @@
 			, 1
 			, ESC_NEW
-			, ""						// 名前空間 (TODO: 実装)
-			, objClass.name				// クラス名
-			, referenceOffsetsBuffer	// 参照メンバオフセット配列
-			, numOfReference			// 参照メンバの個数
+			, ""							// 名前空間 (TODO: 実装)
+			, objClass.GetName().c_str()	// クラス名
+			, referenceOffsetsBuffer		// 参照メンバオフセット配列
+			, numOfReference				// 参照メンバの個数
 			);
 
@@ -1749,6 +1788,6 @@
 			sprintf( temporary
 				, "tempType=Search(\"%s\",\"%s\")"
-				, ""				// 名前空間 (TODO: 実装)
-				, objClass.name		// クラス名
+				, ""							// 名前空間 (TODO: 実装)
+				, objClass.GetName().c_str()	// クラス名
 				);
 
@@ -1759,5 +1798,5 @@
 				, "tempType.SetBaseType(Search(\"%s\",\"%s\"))"
 				, ""								// 名前空間 (TODO: 実装)
-				, objClass.pobj_InheritsClass->name	// 基底クラス名
+				, objClass.pobj_InheritsClass->GetName().c_str()	// 基底クラス名
 				);
 
Index: BasicCompiler_Common/Class.h
===================================================================
--- BasicCompiler_Common/Class.h	(revision 130)
+++ BasicCompiler_Common/Class.h	(revision 131)
@@ -2,4 +2,7 @@
 
 #include <vector>
+#include <string>
+
+#include <Prototype.h>
 #include "Type.h"
 #include "Procedure.h"
@@ -57,12 +60,36 @@
 class CDBClass;
 class CDebugSection;
-class CClass{
+class CClass;
+class InheritedInterface
+{
+	CClass *pInterfaceClass;
+	int vtblOffset;
+public:
+	InheritedInterface( CClass *pInterfaceClass, int vtblOffset )
+		: pInterfaceClass( pInterfaceClass )
+		, vtblOffset( vtblOffset )
+	{
+	}
+
+	CClass &GetInterfaceClass() const{
+		return *pInterfaceClass;
+	}
+	int GetVtblOffset() const
+	{
+		return vtblOffset;
+	}
+};
+typedef vector<InheritedInterface> Interfaces;
+class CClass : public Prototype
+{
 	friend CMember;
 	friend CDBClass;
 	friend CDebugSection;
 
-	// 名前空間
-	NamespaceScopes namespaceScopes;
+	// importされている名前空間
 	NamespaceScopesCollection importedNamespaces;
+
+	// 継承するインターフェイス
+	Interfaces interfaces;
 
 	// Blittable型情報
@@ -93,6 +120,4 @@
 
 public:
-	//クラス名
-	char *name;
 
 	//継承クラスへのポインタ
@@ -111,11 +136,7 @@
 
 public:
-	CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name );
+	CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name );
 	~CClass();
 
-	const NamespaceScopes &GetNamespaceScopes() const
-	{
-		return namespaceScopes;
-	}
 	const NamespaceScopesCollection &GetImportedNamespaces() const
 	{
@@ -123,9 +144,12 @@
 	}
 
-	const string GetName() const
-	{
-		return name;
-	}
-
+	// インターフェイス
+	bool HasInterfaces() const
+	{
+		return ( interfaces.size() != 0 );
+	}
+	bool IsInheritsInterface( const CClass *pInterfaceClass ) const;
+
+	// Blittable型
 	bool IsBlittableType() const
 	{
@@ -140,4 +164,5 @@
 	}
 
+	// シンボル比較
 	bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const;
 	bool IsEqualSymbol( const CClass &objClass ) const;
@@ -154,5 +179,6 @@
 
 	//継承させる
-	bool Inherits( const CClass &inheritsClass, int nowLine );
+	bool Inherits( const char *inheritNames, int nowLine );
+	bool InheritsClass( const CClass &inheritsClass, int nowLine );
 	bool InheritsInterface( const CClass &inheritsClass, int nowLine );
 
Index: BasicCompiler_Common/DebugMiddleFile.cpp
===================================================================
--- BasicCompiler_Common/DebugMiddleFile.cpp	(revision 130)
+++ BasicCompiler_Common/DebugMiddleFile.cpp	(revision 131)
@@ -12,5 +12,5 @@
 void SetLpIndex_DebugFile(char *buffer,int *p,const Type &type){
 	if(NATURAL_TYPE(type.GetBasicType())==DEF_OBJECT || NATURAL_TYPE(type.GetBasicType())==DEF_STRUCT){
-		lstrcpy(buffer+(*p),type.GetClass().name);
+		lstrcpy(buffer+(*p),type.GetClass().GetName().c_str());
 		(*p)+=lstrlen(buffer+(*p))+1;
 	}
@@ -127,5 +127,5 @@
 
 		//クラス名
-		lstrcpy(buffer+i2,pobj_c->name);
+		lstrcpy(buffer+i2,pobj_c->GetName().c_str());
 		i2+=lstrlen(buffer+i2)+1;
 	}
@@ -214,5 +214,5 @@
 		while(pUserProc){
 			if(pUserProc->GetParentClassPtr()){
-				lstrcpy(buffer+i2,pUserProc->GetParentClassPtr()->name);
+				lstrcpy(buffer+i2,pUserProc->GetParentClassPtr()->GetName().c_str());
 				i2+=lstrlen(buffer+i2)+1;
 			}
@@ -312,5 +312,5 @@
 
 		//クラス名
-		lstrcpy(buffer+i2,pobj_c->name);
+		lstrcpy(buffer+i2,pobj_c->GetName().c_str());
 		i2+=lstrlen(buffer+i2)+1;
 
@@ -357,5 +357,5 @@
 			i2+=sizeof(long);
 			if(method->pobj_InheritsClass){
-				lstrcpy(buffer+i2,method->pobj_InheritsClass->name);
+				lstrcpy(buffer+i2,method->pobj_InheritsClass->GetName().c_str());
 				i2+=lstrlen(buffer+i2)+1;
 			}
Index: BasicCompiler_Common/Diagnose.cpp
===================================================================
--- BasicCompiler_Common/Diagnose.cpp	(revision 130)
+++ BasicCompiler_Common/Diagnose.cpp	(revision 131)
@@ -126,5 +126,5 @@
 				temporary[0]=0;
 				lstrcat( temporary, "------------------------------------------------------------------\n" );
-				sprintf( temporary + lstrlen(temporary), "【 %s クラスのコード情報】\n", objClass.name );
+				sprintf( temporary + lstrlen(temporary), "【 %s クラスのコード情報】\n", objClass.GetName().c_str() );
 				sprintf( temporary + lstrlen(temporary), "class code size: %d bytes\n", codeSizeOfClass );
 				lstrcat( temporary, "------------------------------------------------------------------\n" );
Index: BasicCompiler_Common/LoopRefCheck.cpp
===================================================================
--- BasicCompiler_Common/LoopRefCheck.cpp	(revision 130)
+++ BasicCompiler_Common/LoopRefCheck.cpp	(revision 131)
@@ -24,5 +24,5 @@
 	init();
 }
-void CLoopRefCheck::add(char *lpszInheritsClass){
+void CLoopRefCheck::add(const char *lpszInheritsClass){
 	names=(char **)HeapReAlloc(hHeap,0,names,(num+1)*sizeof(char *));
 	names[num]=(char *)HeapAlloc(hHeap,0,lstrlen(lpszInheritsClass)+1);
@@ -30,5 +30,5 @@
 	num++;
 }
-void CLoopRefCheck::del(char *lpszInheritsClass){
+void CLoopRefCheck::del(const char *lpszInheritsClass){
 	int i;
 	for(i=0;i<num;i++){
@@ -50,5 +50,7 @@
 	int i;
 	for(i=0;i<num;i++){
-		if(lstrcmp(names[i],inheritsClass.name)==0) return 1;
+		if( inheritsClass.GetName() == names[i] ){
+			return 1;
+		}
 	}
 	return 0;
Index: BasicCompiler_Common/Object.cpp
===================================================================
--- BasicCompiler_Common/Object.cpp	(revision 130)
+++ BasicCompiler_Common/Object.cpp	(revision 131)
@@ -20,7 +20,7 @@
 
 	UserProc *pUserProc;
-	pUserProc=GetMethodHash(ObjectName,type.GetClass().name,Parameter);
+	pUserProc=GetMethodHash(ObjectName,type.GetClass().GetName().c_str(),Parameter);
 	if(!pUserProc){
-		if(Parameter[0]) SetError(113,type.GetClass().name,cp);
+		if(Parameter[0]) SetError(113,type.GetClass().GetName().c_str(),cp);
 		return;
 	}
@@ -53,5 +53,5 @@
 
 			Type dummyType;
-			sprintf(temporary+lstrlen(temporary),".%s",type.GetClass().name);
+			sprintf(temporary+lstrlen(temporary),".%s",type.GetClass().GetName().c_str());
 			CallProc( PROC_DEFAULT,
 				pUserProc,
@@ -69,5 +69,5 @@
 	else{
 		Type dummyType;
-		sprintf(temporary,"%s.%s",ObjectName,type.GetClass().name);
+		sprintf(temporary,"%s.%s",ObjectName,type.GetClass().GetName().c_str());
 		CallProc( PROC_DEFAULT,
 			pUserProc,
Index: BasicCompiler_Common/Procedure.cpp
===================================================================
--- BasicCompiler_Common/Procedure.cpp	(revision 130)
+++ BasicCompiler_Common/Procedure.cpp	(revision 131)
@@ -4,5 +4,5 @@
 {
 	if( HasParentClass() ){
-		return (string)GetParentClass().name + "." + GetName();
+		return GetParentClass().GetName() + "." + GetName();
 	}
 
@@ -153,4 +153,10 @@
 		//パラメータを追加
 		this->params.push_back( pParam );
+
+/*		if( type.IsObject() && type.GetClass().IsInterface() ){
+			// インターフェイスが引数だったとき
+			// vtblOffsetを引き渡すための引数も用意しておく
+			this->params.push_back( new Parameter( ((string)name + "_vtbl").c_str(), Type(DEF_LONG) ) );
+		}*/
 
 		if(sourceOfParams[i]==','){
@@ -299,5 +305,5 @@
 
 		if( this->pParentClass ){
-			if( this->GetName() == this->pParentClass->name ||
+			if( this->GetName() == this->pParentClass->GetName() ||
 				this->GetName()[0]=='~'){
 				//クラスのコンストラクタ、デストラクタがFunction定義の場合はエラーをだす
Index: BasicCompiler_Common/Type.cpp
===================================================================
--- BasicCompiler_Common/Type.cpp	(revision 130)
+++ BasicCompiler_Common/Type.cpp	(revision 131)
@@ -243,4 +243,8 @@
 	// オブジェクト
 	if(basicType==DEF_OBJECT){
+		if( GetClass().IsInterface() ){
+			// vtblOffsetのサイズを含める
+			return PTR_SIZE*2;
+		}
 		return PTR_SIZE;
 	}
@@ -433,5 +437,5 @@
 {
 	if( basicType == DEF_OBJECT ){
-		if( lstrcmp( pClass->name,"Object")==0){
+		if( pClass->GetName() == "Object" ){
 			return true;
 		}
@@ -442,5 +446,5 @@
 {
 	if( basicType == DEF_OBJECT ){
-		if( lstrcmp( pClass->name,"String")==0){
+		if( pClass->GetName() == "String" ){
 			return true;
 		}
@@ -486,5 +490,5 @@
 
 		if( !( index == 0 || index == -1 ) ){
-			return pClass->name;
+			return pClass->GetName();
 		}
 	}
Index: BasicCompiler_Common/VariableOpe.cpp
===================================================================
--- BasicCompiler_Common/VariableOpe.cpp	(revision 130)
+++ BasicCompiler_Common/VariableOpe.cpp	(revision 131)
@@ -210,5 +210,5 @@
 		if(lpIndex==0) lstrcpy(name,"non");
 		else{
-			lstrcpy(name,((CClass *)lpIndex)->name);
+			lstrcpy(name,((CClass *)lpIndex)->GetName().c_str());
 		}
 	}
@@ -751,5 +751,5 @@
 		//自身のクラスから静的メンバを参照する場合
 		char temp2[VN_SIZE];
-		sprintf(temp2,"%s.%s",pobj_CompilingClass->name,VarName);
+		sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName);
 
 		pVar = globalVars.Find( temp2 );
@@ -1009,5 +1009,5 @@
 	//クラス名
 	if(pobj_CompilingClass){
-		lstrcat(FullName,pobj_CompilingClass->name);
+		lstrcat(FullName,pobj_CompilingClass->GetName().c_str());
 		lstrcat(FullName,"%");
 	}
Index: BasicCompiler_Common/common.h
===================================================================
--- BasicCompiler_Common/common.h	(revision 130)
+++ BasicCompiler_Common/common.h	(revision 131)
@@ -472,6 +472,6 @@
 	CLoopRefCheck();
 	~CLoopRefCheck();
-	void add(char *lpszInheritsClass);
-	void del(char *lpszInheritsClass);
+	void add(const char *lpszInheritsClass);
+	void del(const char *lpszInheritsClass);
 	BOOL check(const CClass &inheritsClass) const;
 };
Index: BasicCompiler_Common/error.cpp
===================================================================
--- BasicCompiler_Common/error.cpp	(revision 130)
+++ BasicCompiler_Common/error.cpp	(revision 131)
@@ -191,4 +191,5 @@
 	if(num==133) lstrcpy(msg,"Thisに代入はできません。");
 	if(num==134) lstrcpy( msg,"ObjPtr関数にはオブジェクト インスタンス以外を指定できません。" );
+	if(num==135) lstrcpy( msg, "クラスまたはインターフェイス以外の型を継承元として指定することはできません。" );
 
 	//Enum関連
Index: BasicCompiler_Common/include/Prototype.h
===================================================================
--- BasicCompiler_Common/include/Prototype.h	(revision 131)
+++ BasicCompiler_Common/include/Prototype.h	(revision 131)
@@ -0,0 +1,40 @@
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include <Namespace.h>
+
+using namespace std;
+
+class Prototype
+{
+	// 名前空間
+	NamespaceScopes namespaceScopes;
+
+	//名前
+	string name;
+
+public:
+
+	Prototype( const NamespaceScopes &namespaceScopes, const string &name )
+		: namespaceScopes( namespaceScopes )
+		, name( name )
+	{
+	}
+	~Prototype()
+	{
+	}
+
+	// 名前空間
+	const NamespaceScopes &GetNamespaceScopes() const
+	{
+		return namespaceScopes;
+	}
+
+	const string &GetName() const
+	{
+		return name;
+	}
+
+};
