Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ereditarietà e polimorfismo
Forum - C/C++ - ereditarietà e polimorfismo

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 19:22
Domenica, 06/12/2009
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


Codice sorgente - presumibilmente C++

  1. // dama classi.cpp : definisce il punto di ingresso dell'applicazione console.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include<iostream>
  6. using namespace std;
  7. #include <string>
  8. class gioco
  9. {
  10. public:
  11.         int cub[8][8][1];
  12.     int o,v,i;
  13.         gioco()
  14.         {
  15.                 o=0;
  16.                 v=0;
  17.                 i=0;
  18.         }
  19.     ~gioco()
  20.         {
  21.                 cout<<"sono il distruttore di gioco"<<endl;
  22.         }
  23.        
  24.  
  25.  
  26.        
  27. };
  28.  
  29. class dama:public gioco
  30. {
  31. public:
  32.         virtual void vis();
  33.         virtual void ins1();
  34.         virtual void ins2();
  35.         virtual void win(bool,bool);
  36. };
  37. class giocatori:public dama
  38. {
  39.         //vi metto le funzioni delle pedine del giocatore 1
  40.         virtual void azione();
  41.     //vi metto le funzioni del giocatore 2
  42.     virtual void azione2();
  43. };
  44.  
  45. namespace matteo
  46. {
  47.         int vet[3]={1,2};
  48.         bool space=false;
  49.         int k=0;
  50.         int m=1;
  51.         bool flag=false;
  52.         int x=0,y=0,n=0,sas=0,mat=0;
  53.         int am=1;
  54.         int ma,sa;//inizio del main()
  55.         int lk=0,as=0;
  56.         int g=0;
  57. }
  58. using namespace matteo;
  59.  
  60. int main()
  61. {
  62.         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;
  63.         //richiamo le varie funzioni delle classi eseguendo il gioco.
  64.         bool gagio;
  65.         bool fagio;
  66.         giocatori dan;
  67.         dan.ins1();
  68.         dan.ins2();
  69.         //fine inserimento pedine
  70.         dan.vis();
  71.         m=0;
  72.         fagio=false;
  73.         gagio=false;
  74.         do
  75.         {
  76.                 dan.azione();
  77.                 int man=0;
  78.         dan.vis();
  79.             //SECONDA PARTE DEL GIOCO FUNZIONI PER GIOCATORE 2
  80.             x=0,y=0,n=0,sas=0;
  81.             m=0;
  82.             dan.azione2();
  83.                 dan.vis();
  84.         sas=0,cas=0,mat=0,man=0;
  85.         for(o=0;o<8;o++)
  86.         {
  87.                 for(i=0;i<8;i++)
  88.                 {
  89.                         if(dan.cub[o][i][1]==2)
  90.                         {
  91.                                 sas++;
  92.                         }
  93.                         else if(dan.cub[o][i][1]==15)
  94.                         {
  95.                                 cas++;
  96.                         }
  97.                 }
  98.         }
  99.         for(o=0;o<8;o++)
  100.         {
  101.                 for(i=0;i<8;i++)
  102.                 {
  103.                         if(dan.cub[o][i][1]==1)
  104.                         {
  105.                                 mat++;
  106.                         }
  107.                         else if(dan.cub[o][i][1]==3)
  108.                         {
  109.                                 man++;
  110.                         }
  111.                 }
  112.         }
  113.         if(sas==0)
  114.         {
  115.                 if (cas==0)
  116.                 {
  117.                         fagio=true;
  118.                 }
  119.         }
  120.         if(mat==0)
  121.         {
  122.                 if(man==0)
  123.                 {
  124.                         gagio=true;
  125.                 }
  126.         }
  127.         }
  128.         while((gagio==false)&&(fagio==false));
  129.         dan.win(gagio,fagio);
  130.         system("pause");
  131. }
  132.  
  133. void giocatori::vis()
  134.         {
  135.         system("cls");//visualizzazione damiera
  136.         cout<<"giocatore 1 hai le pedine "<<(char)vet[0]<<endl;
  137.         cout<<"giocatore 2 hai le pedine "<<(char)vet[1]<<endl;
  138.  
  139.         cout << endl<< "                       ";
  140.         cout << endl<< "   0 1 2 3 4 5 6 7 ";
  141.         for (v=0;v<8;v++)
  142.         {
  143.                 cout <<endl << "  |-|-|-|-|-|-|-|-|"<<endl;
  144.                 if (v <=9) cout << "0"  ;
  145.                         cout << v       <<"|";
  146.                 for (o=0 ;o<8; o++)
  147.                 {
  148.                         if(cub[o][v][1]!=1&&cub[o][v][1]!=2)
  149.                         {
  150.                                 cout << char(cub[o][v][1]) <<"|";
  151.                         }
  152.                         else
  153.                         {
  154.              
  155.                                 cout <<char(cub[o][v][1]) <<"|";
  156.                         }
  157.                         }
  158.                
  159.         }
  160.         cout << endl<< "  |-|-|-|-|-|-|-|-|-|-|"<<endl;
  161.     //fine visualizzazione damiera
  162.         }
  163.         void giocatori::ins1()
  164.         {
  165.        
  166.         //inserimento
  167.         for(int i=0;i<1;i++)
  168.         {
  169.                 for(int s=0;s<8;s=s+2)
  170.                 {
  171.                         cub[i][s][1]=1;
  172.                 }
  173.         }
  174.         for(int i=1;i<2;i++)
  175.         {
  176.                 for(int s=1;s<8;s=s+2)
  177.                 {
  178.                         cub[i][s][1]=1;
  179.                 }
  180.         }
  181.                
  182.         }
  183.         void dama::ins2()
  184.         {
  185.            for(int i=6;i<7;i++)//funzione visualizzA PER GLI 1
  186.            {  
  187.                
  188.                 for(int s=0;s<8;s=s+2)
  189.                 {
  190.                         cub[i][s][1]=2;
  191.                        
  192.                 }
  193.         }
  194.         for(int i=7;i<8;i++)
  195.         {  
  196.                
  197.                 for(int s=1;s<8;s=s+2)
  198.                 {
  199.                         cub[i][s][1]=2;
  200.                        
  201.                 }
  202.         }
  203.        
  204.        
  205.         }
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.        
  215.         void giocatori::azione()
  216.     {
  217.         int am,as,m,n,fg,sg;
  218.         do//mangia per i 2
  219.         {
  220.                    m=0;n=0;
  221.                    fg=0;sg=0;
  222.            cout<<"inserisci le coordinate della pedina  uno che vuoi muovere!"<<endl;
  223.                cin>>m;
  224.                cin>>n;
  225.                cout<<"inserisci dove vuoi spostare!!"<<endl;
  226.                cin>>fg;
  227.                cin>>sg;
  228.                if(cub[m][n][1]==3)
  229.                    {
  230.                              if(cub[fg][sg][1]==2||cub[fg][sg][1]==15)
  231.                                  {
  232.                                    cout<<"dove vuoi andare dopo aver mangiato  "<<endl;
  233.                                    cin>>am;
  234.                                    cin>>as;
  235.                                    space=true;
  236.                                if(am==fg+1)
  237.                                         {
  238.                                           cub[fg][sg][1]=0;
  239.                           cub[am][as][1]=3;
  240.                                   cub[m][n][1]=0;
  241.                                         }
  242.                                         if(am==fg-1)
  243.                                         {
  244.                                           cub[fg][sg][1]=0;
  245.                           cub[am][as][1]=3;
  246.                                   cub[m][n][1]=0;
  247.                                         }
  248.                                
  249.                                  }
  250.                                  else if(cub[m][n][1]==3)
  251.                                  {
  252.                                          if(cub[fg][sg][1]==0)
  253.                                          {
  254.                                                   cub[fg][sg][1]=3;
  255.                               cub[m][n][1]=0;
  256.                                      }
  257.                                  }
  258.                    }
  259.  
  260.                 if(cub[m][n][1]==1)
  261.                 {
  262.                    if(cub[fg][sg][1]==0)
  263.                     {
  264.                              if(fg==m+1)//leva
  265.                                    {
  266.                                         if(sg==n+1||sg==n-1)
  267.                                         {
  268.                                                 if((cub[m+1][n+1][1]!=1)||(cub[m+1][n-1][1]!=1))
  269.                                                 {
  270.                                                        
  271.                                                       space=true;
  272.                                           cub[fg][sg][1]=1;
  273.                                                   cub[m][n][1]=0;
  274.                                                        
  275.                                                 }
  276.                                         }
  277.                                                                
  278.                                  }
  279.                    }
  280.                    else if(cub[fg][sg][1]==2)
  281.                    {
  282.                               cout<<"dove vuoi mangiare  "<<endl;
  283.                                   cin>>am;
  284.                                   cin>>as;
  285.                                   space=true;
  286.                               if(am==fg+1)
  287.                                         {
  288.                                           cub[fg][sg][1]=0;
  289.                           cub[am][as][1]=1;
  290.                                   cub[m][n][1]=0;
  291.                                         }
  292.                                         else if(am==fg-1)
  293.                                         {
  294.                                           cub[fg][sg][1]=0;
  295.                           cub[am][as][1]=1;
  296.                                   cub[m][n][1]=0;
  297.                                         }
  298.                                
  299.                    }
  300.                                
  301.                        
  302.                 }
  303.        
  304.            //tutto ok fino a qui
  305.                
  306.           cout<<"rinserire le coordinate del luogo in cui è stata spostata la pedina\n per verificare se è dama"<<endl;            
  307.           cin>>fg;
  308.           cin>>sg;
  309.           if(cub[fg][sg][1]!=3)
  310.           {
  311.                  if(fg==7)
  312.                          {
  313.                                                  space=true;
  314.                                      cub[m][n][1]=0;
  315.                                      cub[fg][sg][1]=3;
  316.                      }
  317.                                        
  318.           }
  319.          
  320.         }
  321.         while (space==false);
  322.        
  323. }
  324. void giocatori::azione2()
  325. {
  326.         int am,as,m,n,fg,sg;
  327.         do//mangia per i 2
  328.         {
  329.        cout<<"inserisci le coordinate della pedina  due che vuoi muovere!"<<endl;
  330.            cin>>m;
  331.            cin>>n;
  332.            cout<<"inserisci dove vuoi spostare!!"<<endl;
  333.            cin>>fg;
  334.            cin>>sg;
  335.                if(cub[m][n][1]==15)
  336.                    {
  337.                            
  338.                                  
  339.                                  if(cub[fg][sg][1]==1)
  340.                                  {
  341.                                   cout<<"dove vuoi mangiare  "<<endl;
  342.                                   cin>>am;
  343.                                   cin>>as;
  344.                                   space=true;
  345.                               if(am==fg+1)
  346.                                         {
  347.                                           cub[fg][sg][1]=0;
  348.                           cub[am][as][1]=15;
  349.                                   cub[m][n][1]=0;
  350.                                         }
  351.                                         if(am==fg-1)
  352.                                         {
  353.                                           cub[fg][sg][1]=0;
  354.                           cub[am][as][1]=15;
  355.                                   cub[m][n][1]=0;
  356.                                         }
  357.                                
  358.                                  }
  359.                                  if(cub[fg][sg][1]==3)
  360.                                  {
  361.                                   cout<<"dove vuoi mangiare  "<<endl;
  362.                                   cin>>am;
  363.                                   cin>>as;
  364.                                   space=true;
  365.                               if(am==fg+1)
  366.                                         {
  367.                                           cub[fg][sg][1]=0;
  368.                           cub[am][as][1]=15;
  369.                                   cub[m][n][1]=0;
  370.                                         }
  371.                                         else if(am==fg-1)
  372.                                         {
  373.                                           cub[fg][sg][1]=0;
  374.                           cub[am][as][1]=15;
  375.                                   cub[m][n][1]=0;
  376.                                         }
  377.                                
  378.                                  }
  379.                                  else if(cub[m][n][1]==15)
  380.                                  {
  381.                                          if(cub[fg][sg][1]==0)
  382.                                          {
  383.                                                   cub[fg][sg][1]=15;
  384.                               cub[m][n][1]=0;
  385.                                      }
  386.                                  }
  387.                    }
  388.  
  389.                        
  390.        
  391.        
  392.       if(cub[m][n][1]==2)
  393.                 {
  394.                    if(cub[fg][sg][1]==0)
  395.                     {
  396.                              if(fg==m-1)//leva
  397.                                    {
  398.                                         if(sg==n+1||sg==n-1)
  399.                                         {
  400.                                                 if((cub[m-1][n+1][1]!=1)||(cub[m-1][n-1][1]!=1))
  401.                                                 {
  402.                                                        
  403.                                                       space=true;
  404.                                           cub[fg][sg][1]=2;
  405.                                                   cub[m][n][1]=0;
  406.                                                        
  407.                                                 }
  408.                                         }
  409.                                         else
  410.                                         {
  411.                                         cout<<"inserisci le coordinate x e y dove vuoi muovere!"<<endl;
  412.                                 scanf("%d %d",&x,&y);
  413.                                         }
  414.        
  415.                                
  416.                        
  417.                                  }
  418.                    }
  419.                    else if(cub[fg][sg][1]==1)
  420.                    {
  421.                               cout<<"dove vuoi mangiare  "<<endl;
  422.                                   cin>>am;
  423.                                   cin>>as;
  424.                                   space=true;
  425.                               if(am==fg+1)
  426.                                         {
  427.                                           cub[fg][sg][1]=0;
  428.                           cub[am][as][1]=2;
  429.                                   cub[m][n][1]=0;
  430.                                         }
  431.                                         else if(am==fg-1)
  432.                                         {
  433.                                           cub[fg][sg][1]=0;
  434.                           cub[am][as][1]=2;
  435.                                   cub[m][n][1]=0;
  436.                                         }
  437.                                
  438.                    }
  439.                                
  440.                        
  441.           }
  442.        
  443.            //tutto ok fino a qui
  444.                
  445.           cout<<"riinserire le coordinate del luogo in cui è stata spostata la pedina\n per verificare se è dama"<<endl;                   
  446.           cin>>fg;
  447.           cin>>sg;
  448.          
  449.           if(cub[fg][sg][1]!=15)
  450.           {
  451.                         if(fg==0)
  452.                                         {
  453.                                                  space=true;
  454.                                      cub[m][n][1]=0;
  455.                                      cub[fg][sg][1]=15;
  456.                                          
  457.                                                  
  458.                                         }
  459.                                        
  460.           }
  461.        
  462.                 }
  463.      while (space==false);
  464.         }
  465.          
  466.  
  467.         void giocatori::win(bool gagio,bool fagio)
  468.     {
  469.         if(gagio==true)
  470.         {
  471.                 cout<<"-------------------------------------------"<<endl;
  472.                 cout<<"|ha vinto il giocatore due complimenti!!!!! |"<<endl;
  473.         cout<<"-------------------------------------------"<<endl;
  474.         }
  475.         else if(fagio==true)
  476.         {
  477.                 cout<<"--------------------------------------------------"<<endl;
  478.             cout<<"| ha vinto il giocatore uno  complimenti!!!!!     |"<<endl;
  479.             cout<<"--------------------------------------------------"<<endl;
  480.         }
  481. }


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 'file://c:\Documents and Settings\privato\Documenti\Visual Studio 2008\Projects\dama classi\dama classi\Debug\BuildLog.htm'

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 20:20
Domenica, 06/12/2009

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:

Codice sorgente - presumibilmente C++

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



hai dimenticato un public: prima delle dichiarazioni.

PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 20:25
Domenica, 06/12/2009
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 il 07/12/2009 alle 11:06
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:16
Lunedì, 07/12/2009

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::

PM Quote