Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1

    [C++] problema con visibilità oggetti

    Sto facendo un programma che risolve i sudoku... per farlo mi sono scritto un po' di classi:

    class casella : sudoku
    {
    public:
    casella();
    bool possible(int);
    int SetValue(int);
    int GetValue();
    void SetFalse(int);
    private:
    bool num[10];
    int val;
    };

    class riga : sudoku
    {
    public:
    void controllo1();
    void controllo2();
    void update();
    int rig;
    };

    class colonna : sudoku
    {
    public:
    void controllo1();
    void controllo2();
    void update();
    int col;
    };

    class quadrato : sudoku
    {
    public:
    void controllo1();
    void controllo2();
    void update();
    int quad;
    };

    class sudoku
    {
    public:
    sudoku();
    void SolveSudoku();
    casella cas[81];
    private:
    void controllo1();
    void controllo2();
    void update();
    riga rig[9];
    colonna col[9];
    quadrato quad[9];
    };

    Io cercho di avere accesso ad alcuni metodi di casella dalle funzioni controllo1 e update di riga colonna e quadrato. Compilando mi dice:

    sudoku.h:17: error: expected class-name before ‘{’ token
    sudoku.h:30: error: expected class-name before ‘{’ token
    sudoku.h:39: error: expected class-name before ‘{’ token
    sudoku.h:48: error: expected class-name before ‘{’ token
    sudoku.h: In member function ‘void riga::update()’:
    sudoku.h:129: error: ‘cas’ was not declared in this scope
    sudoku.h: In member function ‘void colonna::update()’:
    sudoku.h:144: error: ‘cas’ was not declared in this scope
    sudoku.h: In member function ‘void quadrato::update()’:
    sudoku.h:159: error: ‘cas’ was not declared in this scope
    sudoku.h: In member function ‘void riga::controllo1()’:
    sudoku.h:174: error: ‘cas’ was not declared in this scope
    sudoku.h: In member function ‘void colonna::controllo1()’:
    sudoku.h:195: error: ‘cas’ was not declared in this scope
    sudoku.h: In member function ‘void quadrato::controllo1()’:
    sudoku.h:216: error: ‘cas’ was not declared in this scope

    non capisco perchè da quadrato\riga\colonna non posso accedere a cas..... se qualcuno mi può aiutare lo ringrazio.....

  2. #2
    Quando erediti da una classe devi far precedere il suo nome dal qualificatore di accesso (normalmente public).
    codice:
    class casella : public sudoku
    //eccetera
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    io avevo letto che il qualificatore non era necessario.... cmq ho provato mettendo public.... ma mi da gli stessi identici errori....

  4. #4
    Originariamente inviato da MItaly
    Quando erediti da una classe devi far precedere il suo nome dal qualificatore di accesso (normalmente public).
    codice:
    class casella : public sudoku
    //eccetera
    falso, non è obbligatorio, ma ok è buona norma mettere "public".

    L'errore vero è:
    Codice PHP:
    class sudoku
    {
    public:
    sudoku();
    void SolveSudoku();
    casella cas[81]; 
    in cui casella è una classe derivata da sudoku di cui chiaramente il compilatore non ne conosce ancora l'esistenza.

    Per superare l'impasse potresti fare una roba del genere:

    Codice PHP:
    class casella// forward declaration
    class sudoku
    {
    public:
    sudoku();
    void SolveSudoku();
    casella cas[81]; // Array of pointers of casella 

  5. #5
    Facendo così mi si moltiplicano gli errori.... ho provato a dichiarare la classe sudoku sotto tutte le altre, ma mi da errore comunque...

  6. #6
    oppure
    Codice PHP:
    class sudoku
    {
    public:
    sudoku();
    void SolveSudoku();
    class 
    casella cas[81]; // Array of pointers of casella
    .... 
    ciao

  7. #7
    stessa cosa... come se non avessi modificato nulla...

    Ps: ho editato il primo post mettendo la classe sudoku in fondo.... (come nel mio codice, ho visto che da meno errori)

  8. #8
    Originariamente inviato da Infernal
    Facendo così mi si moltiplicano gli errori.... ho provato a dichiarare la classe sudoku sotto tutte le altre, ma mi da errore comunque...
    Non ti ho consigliato quello che tu hai fatto.
    T'ho consigliato di premettere alla class sudoku la seguente:
    Codice PHP:
    class casella
    in cui praticamente si informa il compilatore che la classe casella è dichiarata altrove e trasformare il membro "casella cas[81]" in "casella * cas[81]"

    ;-)

  9. #9
    Originariamente inviato da Infernal
    ho editato il primo post mettendo la classe sudoku in fondo.... (come nel mio codice, ho visto che da meno errori)
    ahi ahi.. cambi le carte in tavola? E' buona norma editare solo per correggere errori d'ortografia, NON per modificare il codice postato. Ora eventuali altri lettori, non capiranno i giusti consigli che io e mondobimbi t'abbiamo dato, e che tu hai mal'interpretato (bastava fare un copia incolla del codice che io o mondobimbi t'abbiamo postato..).
    ;-)

  10. #10
    io ho fatto ciò che tu e mondobimbi avete detto.... ma mi ha dato una pagina di errori..... (ho riprovato adesso e fa la stessa cosa)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.