|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
[C++] Inizializzazione array
Avendo il seguente programma:
Codice:
#include <iostream>
#include <string>
using namespace std;
class data {
private:
int sett[];
public:
data() {
sett [6] = 15, 22, 33, 56, 58, 21; /* POSSIBILE ERRORE */
}
int func(int n) {
data();
return sett[n];
}
};
int main() {
int a;
data d;
cin >> a;
cout << d.func(a) <<'\n';
return 0;
}
Sono sicuro che l'errore sia dove ho commentato ma non so come risolverlo. Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Codice:
data() {
sett [] = {15, 22, 33, 56, 58, 21};
}
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Quote:
Codice HTML:
main.cpp:12: error: expected primary-expression before '{' token
main.cpp:12: error: expected `;' before '{' token
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Quote:
In questo caso non esiste una sintassi comoda, temo ti tocchi inizializzare a mano i singoli valori.
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12905
|
In genere si usa indicare i nomi delle classi ed i relativi costruttori con la lettera maiuscola.
Codice:
class Data {
public:
Data() { .. }
..
}
Codice:
class data {
public:
data() { .. }
..
}
Non capisco perché nel metodo Codice:
func() Non c'è bisogno di farlo, dato che il metodo func() agisce sull'istanza "d" che hai creato precedentemente. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Alcuni compilatori già lo supportano in stato avanzato. Ecco come risulta il codice con il nuovo metodo di inizializzazione: Codice:
#include <iostream>
#include <string>
using namespace std;
class data {
private:
int sett[6];
public:
data(): sett({15, 22, 33, 56, 58, 21}) {
/* POSSIBILE ERRORE */
}
int func(int n) {
return sett[n];
}
};
int main() {
int a;
data d;
cin >> a;
cout << d.func(a) <<'\n';
return 0;
}
Per care una cosa simile con lo standard attuale devi usare un vettore static. Se quei valori sono costanti allora può anche essere una soluzione valida. Ultima modifica di cionci : 25-08-2010 alle 10:44. |
|
|
|
|
|
|
#7 | |||
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Wow grazie a tutti delle risposte!
Quote:
Quote:
Quote:
Ho Chiamato Data() dentro func() perchè ho sempre pensato non venisse chiamato in automatico il costruttore. Nel senso: inizializzo e utilizzo l'array inizializzato dentro la funzione. Quindi quindi: come faccio ad inizializzare quei 2 array private ? |
|||
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
se una funzione non è statica, vuol dire che per accedere qualcuno l'oggetto l'ha già costruito, se fai
Codice:
data d; Codice:
d.func(); Codice:
class Data {
private:
Data(void);
static int sett[6];
public:
static int func(int n) {
return sett[n];
}
};
int Data::sett[6] = {15, 22, 33, 56, 58, 21};
|
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Quote:
Codice HTML:
int Data::sett[6] = {15, 22, 33, 56, 58, 21};
Hai messo int davanti al nome della classe e con l'operatore di scope hai inizializzato l'array sett.
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Grazie Tuccio ma mi sono accorto che è un argomento che in fondamenti di programmazione non abbiamo visto.
Altre idee? Che non riguardino ovviamente l'inizializzazione a mano. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Una variabile globale è l'unica soluzione. Di fatto è una soluzione simile all'uso di static. Una variabile static è un variabile globale di fatto dichiarata all'interno di una classe, con relativa modifica di visibilità.
Ad esempio, se la dichiari public, allora sarà visibile globalmente con il risolutore di visibilità nomeclasse::, se la dichiari private sarà visibile solamente da tutte le istanze della classe stessa. |
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Quote:
In realtà dovrei inizializzare un array di string composto da 12 elementi, dove ogni elemento corrisponde ad un mese dell'anno. In pratica mi serve realizzare un calendario e mi era comodo poter mettere questo array private e inizializzarlo nella classe. |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La soluzione static è quella corretta in questo caso. C'è una unica copia dell'array per tutte le istanze della classe.
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Beh adesso ci penso poi vediamo perchè ho paura di "tirarmi la zappa sui piedi" come si dice dalle nostre parti.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:24.




















