+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Oggetto matrice di puntatori a classe astratta

  1. #1
    L'avatar di saettadizeus
    saettadizeus non è in linea Scolaretto
    Salve a tutti,
    mi accingo a scrivere un oggetto matriche di puntatori a una classe astratta.

    #ifndef BOARD_H
    #define BOARD_H
    #include "piece.h"
    
    class board
    {
        board()
        {
            m=new piece*[8];
            for(int i=1; i<=8; i++)
                for(int j=1; j<=8; j++)
                    m[i][j]=0;
        }
        piece** m;
    };
    
    #endif
    
    con questo codice non accetta il piece** m;

    poi ho provato anche tramite i vector stl ma non riesco a farlo andare cmq...

    chi mi consigliate di fare? Io preferirei l'stl perchè se uso i puntatori come sopra non riesco ad allocare elementi da 1 a n ma solo da 0 a n-1....

    grazie

  2. #2
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    I vettori C/C++ sono sempre da considerarsi 0-based (Anche in uno std::vector il primo elemento è memorizzato, se inserisci con una push_back e accedi con la notazione [] nella posizione vettore[0]).
    I vettori sono implicitamente 0-based in qualsiasi altro costrutto del linguaggio e funzione di libreria (il primo carattere di una stringa sta in str[0], i vettori che passi ad una API sono 0-based, ecc...).
    Questo vale tra l'altro per ogni linguaggio strutturato "moderno" (java, php).

    Far partire i vettori da 1 è uno spreco di spazio e un'incongruenza logica. Un programmatore che maneggia del codice C++ che fa partire gli indici da 1 avrà qualche problema iniziale ad addentrarsi nel tuo codice.

    L'STL (questo per amor di precisione) non esiste più... i suoi costrutti (il vector e numerosi altri) sono stati trasportati nel namespace std e quella che era una libreria parallela (Standard Template Library) è parte integrante del linguaggio.

    Fatto questo preambolo (il sottinteso quindi è: abituati ad usare gli indici nella maniera standard, anche se preferisci utilizzare gli std::vector), passiamo al problema in sé:
    - In che senso non accetta piece**? Ti da un errore il compilatore, il linker, oppure il programma viene compilato ma non funziona? E, se ottieni un errore, cosa ti dice di preciso il compilatore?
    - L'oggetto piece com'è dichiarato in piece.h?
    - Per adesso non dovrebbe influire, ma se non specifichi il tipo di accesso (public,private,protected) di default metodi e membri della classe sono private (e quindi inutilizzabili all'esterno dello scope della classe).

    Ciaociao
    Ultima modifica di bottomap; 12-12-2008 19:29 
    ℹ️ Leggi di più su bottomap ...

  3. #3
    L'avatar di sLaSh17
    sLaSh17 non è in linea Scolaretto
    a che ti serve qlcs del genere andré'??

  4. #4
    L'avatar di saettadizeus
    saettadizeus non è in linea Scolaretto
    ecco la classe astratta piece:

    #include "board.h"
    
    class piece
    {
        public:
            piece();
            virtual bool move() = 0;
    };
    
    praticamente l'errore, in compilazione, lo ricevo quando provo a dichiare il puntatore piece**

    mi da 2 errori:
    error: ISO C++ forbids declaration of `piece' with no type
    error: expected `;' before '*' token

    ho notato che il problema si presenta quando includo "board.h" in piece.h
    Spero non siano ancora quei maledettessimi include multipli!!!
    ho già inserito gli #ifndef etc in entrambi i file...

    che ne pensate? grazie...
    Ultima modifica di saettadizeus; 12-12-2008 16:40  Motivo: mancava tag code e un include

  5. #5
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Più che probabile che sia un problema di inclusione multipla. boards.h cosa contiene?

    A naso ho l'impressione che ti manchi un ; in fondo a qualche classe...

    Edit: MA... noto adesso che board.h include piece.h e piece.h include board.h... possibile?
    Evita come la peste questi riferimenti circolari e fa in modo che siano i moduli (.cpp) ad includere quello che serve loro e nient'altro... nonostante le #ifndef/#define si possono venire a creare inutilmente situazioni complicate... la main ad esempio cosa sta includendo? boards, piece o entrambi nel giusto ordine (come sarebbe il caso)?


    Ciaociao
    ℹ️ Leggi di più su bottomap ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 0
    Ultimo Post: 18-11-2010, 17:03
  2. Risposte: 7
    Ultimo Post: 09-03-2009, 20:14
  3. [C/C++] Matrice e puntatori
    Da gheldrya nel forum C/C++
    Risposte: 11
    Ultimo Post: 28-03-2008, 18:59
  4. [C++] Classe static creazione matrice
    Da thedoot nel forum C/C++
    Risposte: 3
    Ultimo Post: 11-02-2008, 13:22
  5. Calcolare la Dimensione di una oggetto di una classe
    Da jackmoros nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 09-06-2006, 10:03