web-dev-qa-db-fra.com

Passer des structs à des fonctions

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.

25
Phorce

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);
}
82
Nikos C.

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);
}
1
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.

1
Inisheer