Oppure

Loading
06/12/09 18:22
matteog
Stò implementando il gioco della dama ma mi dà un errore nell'ereditarietà delle funzioni virtuali delle varie classi con le sottoclassi


posto gli erropri che mi stampa mi spiegate dove sbaglio?grazie mille


// dama classi.cpp : definisce il punto di ingresso dell'applicazione console.
//

#include "stdafx.h"
#include<iostream>
using namespace std;
#include <string>
class gioco
{
public:
	int cub[8][8][1];
    int o,v,i;
	gioco()
	{
		o=0;
		v=0;
		i=0;
	}
    ~gioco()
	{
		cout<<"sono il distruttore di gioco"<<endl;
	}
	


	
};

class dama:public gioco
{
public:
	virtual void vis();
	virtual void ins1();
	virtual void ins2();
	virtual void win(bool,bool);
};
class giocatori:public dama
{
	//vi metto le funzioni delle pedine del giocatore 1
	virtual void azione();
    //vi metto le funzioni del giocatore 2
    virtual void azione2();
};

namespace matteo 
{ 
	int vet[3]={1,2};
	bool space=false;
	int k=0;
	int m=1;
	bool flag=false;
	int x=0,y=0,n=0,sas=0,mat=0;
	int am=1;
	int ma,sa;//inizio del main()
	int lk=0,as=0;
	int g=0;
}
using namespace matteo;

int main()
{
	int o=0,v=0,s=0,i=0,da=0,ga=0,ka=0,sg=0,fg=0,h=0,mm=0,man=0,cas=0;
	//richiamo le varie funzioni delle classi eseguendo il gioco.
	bool gagio;
	bool fagio;
	giocatori dan;
	dan.ins1();
	dan.ins2();
	//fine inserimento pedine
	dan.vis();
	m=0;
	fagio=false;
	gagio=false;
	do
	{
		dan.azione();
		int man=0;
        dan.vis();
	    //SECONDA PARTE DEL GIOCO FUNZIONI PER GIOCATORE 2
	    x=0,y=0,n=0,sas=0;
	    m=0;
	    dan.azione2();
		dan.vis();
	sas=0,cas=0,mat=0,man=0;
	for(o=0;o<8;o++)
	{
		for(i=0;i<8;i++)
		{
			if(dan.cub[o][i][1]==2)
			{
				sas++;
			}
			else if(dan.cub[o][i][1]==15)
			{
				cas++;
			}
		}
	}
	for(o=0;o<8;o++)
	{
		for(i=0;i<8;i++)
		{
			if(dan.cub[o][i][1]==1)
			{
				mat++;
			}
			else if(dan.cub[o][i][1]==3)
			{
				man++;
			}
		}
	}
	if(sas==0)
	{
		if (cas==0)
		{
			fagio=true;
		}
	}
	if(mat==0)
	{
		if(man==0)
		{
			gagio=true;
		}
	}
	}
	while((gagio==false)&&(fagio==false)); 
	dan.win(gagio,fagio);
	system("pause");
}

void giocatori::vis()
	{
	system("cls");//visualizzazione damiera
	cout<<"giocatore 1 hai le pedine "<<(char)vet[0]<<endl;
	cout<<"giocatore 2 hai le pedine "<<(char)vet[1]<<endl;

	cout << endl<< "                       ";
	cout << endl<< "   0 1 2 3 4 5 6 7 ";
	for (v=0;v<8;v++)
	{
		cout <<endl << "  |-|-|-|-|-|-|-|-|"<<endl;
		if (v <=9) cout << "0"	;
			cout << v	<<"|";
		for (o=0 ;o<8; o++)
		{
			if(cub[o][v][1]!=1&&cub[o][v][1]!=2)
			{
				cout << char(cub[o][v][1]) <<"|";
			}
			else
			{
              
				cout <<char(cub[o][v][1]) <<"|";
			}
			}
		
	}
	cout << endl<< "  |-|-|-|-|-|-|-|-|-|-|"<<endl;
    //fine visualizzazione damiera
	}
	void giocatori::ins1()
	{
	
	//inserimento
	for(int i=0;i<1;i++)
	{
		for(int s=0;s<8;s=s+2)
		{
			cub[i][s][1]=1;
		}
	}
	for(int i=1;i<2;i++)
	{
		for(int s=1;s<8;s=s+2)
		{
			cub[i][s][1]=1;
		}
	}
		
	}
	void dama::ins2()
	{
	   for(int i=6;i<7;i++)//funzione visualizzA PER GLI 1
	   {   
		
		for(int s=0;s<8;s=s+2)
		{
			cub[i][s][1]=2;
			
		}
	}
	for(int i=7;i<8;i++)
	{   
		
		for(int s=1;s<8;s=s+2)
		{
			cub[i][s][1]=2;
			
		}
	}
	
	
	}








	
	void giocatori::azione()
    {
	int am,as,m,n,fg,sg;
	do//mangia per i 2
	{
		   m=0;n=0;
		   fg=0;sg=0;
           cout<<"inserisci le coordinate della pedina  uno che vuoi muovere!"<<endl;
	       cin>>m;
	       cin>>n;
	       cout<<"inserisci dove vuoi spostare!!"<<endl;
	       cin>>fg;
	       cin>>sg;
	       if(cub[m][n][1]==3)
		   {
			     if(cub[fg][sg][1]==2||cub[fg][sg][1]==15)
				 {
				   cout<<"dove vuoi andare dopo aver mangiato  "<<endl;
				   cin>>am;
				   cin>>as;
				   space=true;
			       if(am==fg+1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=3;
			          cub[m][n][1]=0;
					}
					if(am==fg-1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=3;
			          cub[m][n][1]=0;
					}
				
				 }
				 else if(cub[m][n][1]==3)
				 {
					 if(cub[fg][sg][1]==0)
					 {
						  cub[fg][sg][1]=3;
    		              cub[m][n][1]=0;
				     }
				 }
		   }

		if(cub[m][n][1]==1)
		{
		   if(cub[fg][sg][1]==0)
		    {
			     if(fg==m+1)//leva
				   {
					if(sg==n+1||sg==n-1)
					{
						if((cub[m+1][n+1][1]!=1)||(cub[m+1][n-1][1]!=1))
						{
							
						      space=true;
			                  cub[fg][sg][1]=1;
					          cub[m][n][1]=0;
							
						}
					}
								
				 }
		   }
		   else if(cub[fg][sg][1]==2)
		   {
			      cout<<"dove vuoi mangiare  "<<endl;
				  cin>>am;
				  cin>>as;
				  space=true;
			      if(am==fg+1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=1;
			          cub[m][n][1]=0;
					}
					else if(am==fg-1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=1;
			          cub[m][n][1]=0;
					}
				
		   }
				
			
		}
	
	   //tutto ok fino a qui
	        
	  cout<<"rinserire le coordinate del luogo in cui è stata spostata la pedina\n per verificare se è dama"<<endl;	            
	  cin>>fg;
	  cin>>sg;
	  if(cub[fg][sg][1]!=3)
	  {
	         if(fg==7)
			 {
						 space=true;
			             cub[m][n][1]=0;
			             cub[fg][sg][1]=3;
		     }
					
	  }
	  
	}
	while (space==false);
	
}
void giocatori::azione2()
{
	int am,as,m,n,fg,sg;
	do//mangia per i 2
	{
       cout<<"inserisci le coordinate della pedina  due che vuoi muovere!"<<endl;
	   cin>>m;
	   cin>>n;
	   cout<<"inserisci dove vuoi spostare!!"<<endl;
	   cin>>fg;
	   cin>>sg;
	       if(cub[m][n][1]==15)
		   {
			    
				 
				 if(cub[fg][sg][1]==1)
				 {
				  cout<<"dove vuoi mangiare  "<<endl;
				  cin>>am;
				  cin>>as;
				  space=true;
			      if(am==fg+1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=15;
			          cub[m][n][1]=0;
					}
					if(am==fg-1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=15;
			          cub[m][n][1]=0;
					}
				
				 }
				 if(cub[fg][sg][1]==3)
				 {
				  cout<<"dove vuoi mangiare  "<<endl;
				  cin>>am;
				  cin>>as;
				  space=true;
			      if(am==fg+1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=15;
			          cub[m][n][1]=0;
					}
					else if(am==fg-1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=15;
			          cub[m][n][1]=0;
					}
				
				 }
				 else if(cub[m][n][1]==15)
				 {
					 if(cub[fg][sg][1]==0)
					 {
						  cub[fg][sg][1]=15;
    		              cub[m][n][1]=0;
				     }
				 }
		   }

			
	
	
      if(cub[m][n][1]==2)
		{
		   if(cub[fg][sg][1]==0)
		    {
			     if(fg==m-1)//leva
				   {
					if(sg==n+1||sg==n-1)
					{
						if((cub[m-1][n+1][1]!=1)||(cub[m-1][n-1][1]!=1))
						{
							
						      space=true;
			                  cub[fg][sg][1]=2;
					          cub[m][n][1]=0;
							
						}
					}
					else
					{
	             			cout<<"inserisci le coordinate x e y dove vuoi muovere!"<<endl;
	                        scanf("%d %d",&x,&y);
					}
	
				
			
				 }
		   }
		   else if(cub[fg][sg][1]==1)
		   {
			      cout<<"dove vuoi mangiare  "<<endl;
				  cin>>am;
				  cin>>as;
				  space=true;
			      if(am==fg+1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=2;
			          cub[m][n][1]=0;
					}
					else if(am==fg-1)
					{
					  cub[fg][sg][1]=0;
    		          cub[am][as][1]=2;
			          cub[m][n][1]=0;
					}
				
		   }
				
			
	  }
	
	   //tutto ok fino a qui
	        
	  cout<<"riinserire le coordinate del luogo in cui è stata spostata la pedina\n per verificare se è dama"<<endl;	            
	  cin>>fg;
	  cin>>sg;
	  
	  if(cub[fg][sg][1]!=15)
	  {
	                if(fg==0)
					{
						 space=true;
			             cub[m][n][1]=0;
			             cub[fg][sg][1]=15;
		    			 
						 
					}
					
	  }
	
		}
     while (space==false);
	}
	 

	void giocatori::win(bool gagio,bool fagio)
    {
	if(gagio==true)
	{
		cout<<"-------------------------------------------"<<endl;
		cout<<"|ha vinto il giocatore due complimenti!!!!! |"<<endl;
        cout<<"-------------------------------------------"<<endl;
	}
	else if(fagio==true)
	{
		cout<<"--------------------------------------------------"<<endl;
	    cout<<"| ha vinto il giocatore uno  complimenti!!!!!     |"<<endl;
	    cout<<"--------------------------------------------------"<<endl; 
	}
}

1>c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(76) : error C2248: 'giocatori::azione': impossibile accedere a private membro dichiarato nella classe 'giocatori'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(40): vedere la dichiarazione di 'giocatori::azione'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(37): vedere la dichiarazione di 'giocatori'
1>c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(82) : error C2248: 'giocatori::azione2': impossibile accedere a private membro dichiarato nella classe 'giocatori'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(42): vedere la dichiarazione di 'giocatori::azione2'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(37): vedere la dichiarazione di 'giocatori'
1>c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(134) : error C2509: 'vis': funzione membro non dichiarata in 'giocatori'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(37): vedere la dichiarazione di 'giocatori'
1>c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(164) : error C2509: 'ins1': funzione membro non dichiarata in 'giocatori'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(37): vedere la dichiarazione di 'giocatori'
1>c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(468) : error C2509: 'win': funzione membro non dichiarata in 'giocatori'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\dama classi\dama classi\dama classi.cpp(37): vedere la dichiarazione di 'giocatori'
1>Il log di compilazione è stato salvato in ' and Settings\privato\Documenti\Visual Studio 2008\Projects\dama classi\dama classi\Debug\BuildLog.htm'
aaa
06/12/09 19:20
HeDo

a parte che quel codice è illeggibile, i nomi delle variabili non sono auto esplicativi e quella specie di namespace "panino" che usi per le variabili globlali è inguardabile.

nonostante tutto il macello il problema sta qui:

class giocatori:public dama
{
    //vi metto le funzioni delle pedine del giocatore 1
    virtual void azione();
    //vi metto le funzioni del giocatore 2
    virtual void azione2();
}; 


hai dimenticato un public: prima delle dichiarazioni.
aaa
06/12/09 19:25
matteog
ok quello si, lo ho corretto ma rimane i seguenti errori:
>c:\documents and settings\privato\documenti\visual studio 2008\projects\pp\pp\pp.cpp(134) : error C2509: 'vis': funzione membro non dichiarata in 'giocatori'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\pp\pp\pp.cpp(37): vedere la dichiarazione di 'giocatori'
1>c:\documents and settings\privato\documenti\visual studio 2008\projects\pp\pp\pp.cpp(164) : error C2509: 'ins1': funzione membro non dichiarata in 'giocatori'
1> c:\documents and settings\privato\documenti\visual studio 2008\projects\pp\pp\pp.cpp(37): vedere la dichiarazione di 'giocatori'
1>c:\documents and settings\privato\documenti\visual studio 2008\projects\pp\pp\pp.cpp(468) : error C2509: 'win': funzione membro non dichiarata in 'giocatori'



e per il cosiddetto panino hai qualcosa da suggerirmi per evitare di prendere un 3;)?
Ultima modifica effettuata da matteog 07/12/09 10:06
aaa
07/12/09 11:16
HeDo

allora, finalmente ho due minuti per guardare meglio il prog.
Gli altri errori sono dati dal fatto che non è "giocatore" che ha quei metodi ma "dama", quindi sostituisci a giocatore:: dama::
aaa