J'ai du mal à comprendre comment passer d'une structure (par référence) à une fonction afin que les fonctions membres de la structure puissent être renseignées. Jusqu'ici j'ai écrit:
bool data(struct *sampleData)
{
}
int main(int argc, char *argv[]) {
struct sampleData {
int N;
int M;
string sample_name;
string speaker;
};
data(sampleData);
}
L'erreur que je reçois est:
C++ requiert un spécificateur de type pour toutes les déclarations bool data (const & testStruct)
J'ai essayé quelques exemples expliqués ici: Un moyen simple de passer struct struct temporaire en valeur en C++?
J'espère que quelqu'un pourra m'aider.
Tout d'abord, la signature de votre fonction data ():
bool data(struct *sampleData)
ne peut probablement pas fonctionner, car l'argument n'a pas de nom. Lorsque vous déclarez un argument de fonction auquel vous souhaitez réellement accéder, il lui faut un nom. Alors changez-le en quelque chose comme:
bool data(struct sampleData *samples)
Mais en C++, vous n'avez pas besoin d'utiliser struct
du tout. Cela peut donc simplement devenir:
bool data(sampleData *samples)
Deuxièmement, la structure sampleData
n'est pas connue de data () à ce stade. Donc, vous devriez le déclarer avant cela:
struct sampleData {
int N;
int M;
string sample_name;
string speaker;
};
bool data(sampleData *samples)
{
samples->N = 10;
samples->M = 20;
// etc.
}
Et enfin, vous devez créer une variable de type sampleData
. Par exemple, dans votre fonction main ():
int main(int argc, char *argv[]) {
sampleData samples;
data(&samples);
}
Notez que vous devez transmettre l'adresse de la variable à la fonction data (), car elle accepte un pointeur.
Cependant, notez qu'en C++, vous pouvez directement passer des arguments par référence sans avoir à "l'émuler" avec des pointeurs. Vous pouvez le faire à la place:
// 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);
}
Passer des structures à des fonctions par référence: simplement :)
#define maxn 1000
struct solotion
{
int sol[maxn];
int arry_h[maxn];
int cat[maxn];
int scor[maxn];
};
void inser(solotion &come){
come.sol[0]=2;
}
void initial(solotion &come){
for(int i=0;i<maxn;i++)
come.sol[i]=0;
}
int main()
{
solotion sol1;
inser(sol1);
solotion sol2;
initial(sol2);
}
bool data(sampleData *data)
{
}
Vous devez indiquer à la méthode le type de structure que vous utilisez. Dans ce cas, sampleData.
Remarque: Dans ce cas, vous devrez définir la structure avant la méthode pour qu'elle soit reconnue.
Exemple:
struct sampleData
{
int N;
int M;
// ...
};
bool data(struct *sampleData)
{
}
int main(int argc, char *argv[]) {
sampleData sd;
data(&sd);
}
Note 2: Je suis un gars C. Il peut y avoir un moyen plus c ++ ish de le faire.