Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [C++] *char[]

  1. #1

    [C++] *char[]

    Ciao, tempo fa ho scritto uin piccolo programmino in programmazione strutturata, adesso volevo riscriverlo usando gli oggetti, ma non riesco a fare una trasformazione:

    Vecchio Codice Strutturato:

    const char *suit[ 4 ] = { "Fiori", "Cuori", "Pick", "Denari" };
    const char *face[ 13 ] = { "Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove", "Dieci", "Jack", "Donna", "Re" };

    Nuovo Codice Ad Oggetti:

    class mazzo {
    mazzo();

    public:

    private:
    char *seme[4];
    char *numero[7];
    };

    mazzo::mazzo() {
    *seme[] = {"Cuor", "Mattoni", "Picche", "Fiori"};
    *numero[] = {"Asso", "Re", "Donna", "Jack", "Dieci", "Nove", "Otto"};
    }

    14 c:\docume~1\federico\docume~1\lavori~1\giocod~1\ma zzo.cpp
    parse error before `{'
    15 c:\docume~1\federico\docume~1\lavori~1\giocod~1\ma zzo.cpp
    ANSI C++ forbids declaration `numero' with no type
    15 c:\docume~1\federico\docume~1\lavori~1\giocod~1\ma zzo.cpp
    initialization to `int *' from `const char *'
    16 c:\docume~1\federico\docume~1\lavori~1\giocod~1\ma zzo.cpp
    parse error before `}'

    Qualcuno sa dirmi che cosa devo fare per correggere questo errore?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Quello che hai scritto pernso ti sarebbe stato dato come errore anche in c, quel tipo di inizializzazione degli array puo avvenire solo in fase di dichiarazione, cioe:

    int a[5] = {...}

    ma non puoi fare

    int a[5];
    a = {..};


    proprio perchè assegnare il valore con '= {...}' è un'inizializzazione e deve essere fatta contestualmente all'allocazione della variabile che avviene quando la dichiari.

    Poiche tu hai dichiarato quegli array come dei campi di classe, non puoi inizilizzarli direttamnte, quindi per inizializzarli nel costruttore imposta manualmente ogni valore:

    semi[0] = ...
    semi[1] = ...


  3. #3
    Si, adesso funziona grazie mille...

    seme[0] = "Cuori";
    seme[1] = "Mattoni";
    seme[2] = "Picche";
    ...

  4. #4
    Utente di HTML.it L'avatar di linux2
    Registrato dal
    May 2003
    Messaggi
    36
    ma non bisognerebbe mettere char semi[4][15] = {...

  5. #5
    C:\DEV-C_~1\Lib\\libmingw32.a(main.o)(.text+0x8e): undefined reference to `WinMain@16'

    Come mai su DevC++ nella sezione linker mi da sempre questo errore?

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Il motivo è semplice, in c++ per creare un eseguibile quando fai il linking, devi aver dichiarto la funzione main in uno dei file del progetto, se no non hai un punto di ingresso al programma. Se non hai ancora fatto il main limitati a fare la compilazione; se vuoi linkare comuqnue scriviti da qlche parte un main che puoi anche lasciare vuoto, basta che lo metti,


  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    3
    Originariamente inviato da linux2
    ma non bisognerebbe mettere char semi[4][15] = {...
    No, se metti il [15] punti al 16esimo char della riga 4, potresti memorizzare solo quel carattere...

    Mi viene un dubbio (ho la memoria corta): dato che sono stringhe statiche, quando memorizziamo un nome più corto del limite massimo i char rimanenti che valore assumono? senza significato, giusto? e dopo l'ultimo char memorizzato viene messo il carattere tappo (come si chiama? \0 mi pare )

  8. #8
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da clad
    No, se metti il [15] punti al 16esimo char della riga 4, potresti memorizzare solo quel carattere...
    Eh?


    Originariamente inviato da clad
    Mi viene un dubbio (ho la memoria corta): dato che sono stringhe statiche, quando memorizziamo un nome più corto del limite massimo i char rimanenti che valore assumono?
    Non 'cè un limite massimo, con

    char *seme[4];

    dichiari un array di 4 puntatori a char, ognuno deiquali poi dovra essere inizializzato in qualke modo, ma non si da un limite ala lugnhezza della stringa,,

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    3
    Originariamente inviato da anx721
    Eh?
    Dicevo che mettendo una notazione tipo stringa[0][15] accedi al carattere di posto 16 nella prima riga:
    codice:
    cout<<seme[0][2]; //stampa la lettera "o"
    Originariamente inviato da anx721

    Non 'cè un limite massimo, con

    char *seme[4];

    dichiari un array di 4 puntatori a char, ognuno deiquali poi dovra essere inizializzato in qualke modo, ma non si da un limite ala lugnhezza della stringa,,
    Ah scusami, per una svista avevo capito che erano stringhe statiche :master:


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 © 2024 vBulletin Solutions, Inc. All rights reserved.