In primo luogo, la firma dei dati() funzione:
bool data(struct *sampleData)
non può assolutamente funzionare, perché l'argomento non ha un nome. Quando dichiari un argomento di funzione a cui intendi effettivamente accedere, ha bisogno di un nome. Quindi cambiare a qualcosa come:
bool data(struct sampleData *samples)
Ma in C++, non c'è bisogno di utilizzare struct
a tutti in realtà. Quindi questo può diventare semplicemente:
bool data(sampleData *samples)
In secondo luogo, il sampleData
struct non è noto per i dati() in quel punto. Così si dovrebbe dichiararlo prima:
struct sampleData {
int N;
int M;
string sample_name;
string speaker;
};
bool data(sampleData *samples)
{
samples->N = 10;
samples->M = 20;
// etc.
}
E, infine, è necessario creare una variabile di tipo sampleData
. Ad esempio, nella funzione main():
int main(int argc, char *argv[]) {
sampleData samples;
data(&samples);
}
Si noti che è necessario passare l'indirizzo della variabile ai dati di funzione(), dal momento che accetta un puntatore.
Tuttavia, si noti che in C++ è possibile passare direttamente gli argomenti per riferimento e non è necessario "emularlo" con i puntatori. Puoi farlo invece:
// Note that the argument is taken by reference (the "&" in front
// of the argument name.)
bool data(sampleData &samples)
{
samples.N = 10;
samples.M = 20;
// etc.
}
int main(int argc, char *argv[]) {
sampleData samples;
// No need to pass a pointer here, since data() takes the
// passed argument by reference.
data(samples);
}
stai passando un nome di tipo a una funzione non una variabile? – billz
Questo non è per riferimento, cioè per puntatore. Non hai creato un'istanza di 'sampleData' quindi non ha nome. Inoltre, come è possibile che la funzione dati bool sia in grado di sapere che 'sampleData' esiste? – Rapptz
@billz 'sampleData' è il nome della mia struct. Voglio essere in grado di passare questa struttura alla funzione – Phorce