Salve a tutti, mi sono appena iscritto e mi piacerebbe mostrarvi questo piccolo pezzo di codice che mi sta dando 2 grattacapi..
Premetto che è un annetto che non uso C++ , lo sto ristudiando ultimamente perchè volevo riprenderci la mano per dare l'esame di C++ della mia facoltà..

Sostanzialmente, per esercizio, volevo creare un programma per giocare a texas holdem heads up contro il pc ma sono ancora all'inizio..vi espongo il problema e vi mostro il codice:


PRIMO PROBLEMA:
Ho definito una classe Card:

codice:
#include <iostream> 
class Card{ 
public: 
    Card(int n,const char *s,int n1):number(n),seed(*s),numDeck(n1){
    std::cout<<"\nCreata nuova carta. Numero: "<<n <<" Seme: "<<s<<" Numero nel mazzo: "<< n1; }
    int getNumber(); 
private:
     int number;
     char seed;
     int numDeck; 
};
Card.cpp non lo riporto (c'è solo l'implementazione di getNumber() { return number; } )

Dopodichè ho definito una classe Cards:
codice:
#include "Card.h" 
class Cards{ 
public:
    Cards();
    Card* arrayCarte [52];
    Card* temp; 
};
Vi mostro anche il costruttore di questa classe Cards:

codice:
#include "Cards.h"
Cards::Cards(){ 
int n=0; 
for(int i=0;i<13;i++){ 
    arrayCarte[i] = new Card(i+1,"C",n+1);
    n++; 
} 
for(int i=0;i<13;i++){ 
    arrayCarte[i] = new Card(i+1,"D",n+1); 
    n++; 
}
 for(int i=0;i<13;i++){ 
     arrayCarte[i] = new Card(i+1,"F",n+1); 
     n++; 
} 
for(int i=0;i<13;i++){ 
     arrayCarte[i] = new Card(i+1,"P",n+1);
     n++; 
}
//PERCHE' NON SI PUO USARE L'OPERATORE -> IN UN CICLO??? ...E' POSSIBILE USARLO SOLO CON UN BINDING DINAMICO??? 
//for(int i=0;i<52;i++){ 
    std::cout<<"\n"<<arrayCarte[0]->getNumber(); 
    std::cout<<"\n"<<arrayCarte[1]->getNumber();
    std::cout<<"\n"<<arrayCarte[2]->getNumber(); 
    std::cout<<"\n"<<arrayCarte[3]->getNumber(); 
    std::cout<<"\n"<<arrayCarte[4]->getNumber(); 
//} 
}
Guardate le ultime righe , dove si va a stampare il numero delle carte . Ecco se questa operazione la faccio con un ciclo for (che ho commentato), il programma smette di funzionare ("Windows: è in corso una ricerca del problema...")..
Anziani e saggi programmatori, illuminatemi!!


SECONDO PROBLEMA:
Sostanzialmente credo si tratti del solito problema, in un altro pezzo di codice:
Ecco qui la Classe Mazziere. Questa classe ha una funzione che mescola le carte (che ho trovato qui http://www.fredosaurus.com/notes-cpp...m-shuffle.html e riadattato, molto probabilmente, male, per funzionare con un array di puntatori ad oggetti di tipo Card)



codice:
#include "Cards.h" 
class Dealer{ 
public:
     Dealer();
     void shuffle();
 private: 
    Cards deck; };
Dealer.cpp:

codice:
#include "Dealer.h" 
#include <cstdlib> // for srand and rand 
#include <ctime> 
#include <iostream> 
Dealer::Dealer(){ } 

void Dealer::shuffle(){
    std::cout<<"\nIl mazziere mescola le carte..." << std::endl;
    srand(time(0));

    //--- Shuffle elements by randomly exchanging each with one other.
for (int i=0; i<(52-1); i++) {
    int r = i + (rand() % (52-i)); // Random remaining position. 
    //cout di debug    
    std::cout<<"\n\nPRIMA DELLO SWAP:\ndeck.temp= "<<deck.temp<<"\ndeck.arrayCarte["<<i<<"]= "<<deck.arrayCarte[i]<<"\ndeck.arrayCarte["<<r<<"]= "<<deck.arrayCarte[r]; 

    deck.temp = deck.arrayCarte[i];
    deck.arrayCarte[i] = deck.arrayCarte[r];
    deck.arrayCarte[r] = deck.temp; 
    //cout di debug  
    std::cout<<"\nDOPO LO SWAP:\ndeck.temp= "<<deck.temp<<"\ndeck.arrayCarte["<<i<<"]= "<<deck.arrayCarte[i]<<"\ndeck.arrayCarte["<<r<<"]= "<<deck.arrayCarte[r];
 } 

 for(int h=0;h<52;h++){ 
    std::cout << ( deck.arrayCarte[h]->getNumber() ) ; // Just print number 
    
 } 
}

Anche qui nelle ultime righe del Dealer.cpp c'è il solito ciclo for che crea il problema.
Inoltre se invece del ciclo for, ci mettiamo:

codice:
std::cout << ( deck.arrayCarte[0]->getNumber() ) ; // Just print number 
std::cout << ( deck.arrayCarte[1]->getNumber() ) ; 
std::cout << ( deck.arrayCarte[2]->getNumber() ) ;
fino ad arrivare alla posizione 52, il valore del numero della carta è sballato: tipo 3674600 oppure 1076889761...

Ora, sicuramente qui avrò sbagliato ad usare i puntatori..perdonate l'incompetenza e , se avete voglia, magari mi dite dov'è l'errore..

Ringrazio in anticipo!