Подтвердить что ты не робот

Передача структур в функции

У меня возникли проблемы с пониманием того, как передать структуру (по ссылке) функции, чтобы функции-члены структуры могли быть заполнены. До сих пор я писал:

bool data(struct *sampleData)
{

}

int main(int argc, char *argv[]) {

      struct sampleData {

        int N;
        int M;
        string sample_name;
        string speaker;
     };
         data(sampleData);

}

Ошибка, которую я получаю:

С++ требует спецификатора типа для всех объявлений bool data (const & testStruct)

Я попробовал несколько примеров, описанных здесь: Простой способ передать временную структуру по значению в С++?

Надеюсь, кто-то может мне помочь.

4b9b3361

Ответ 1

Во-первых, подпись вашей функции data():

bool data(struct *sampleData)

не может работать, потому что аргумент не имеет имени. Когда вы объявляете аргумент функции, который вы намерены фактически получить, ему нужно имя. Поэтому измените его на что-то вроде:

bool data(struct sampleData *samples)

Но в С++ вам вообще не нужно использовать struct. Так что это может просто стать:

bool data(sampleData *samples)

Во-вторых, структура sampleData не известна данным() в этой точке. Поэтому вы должны заявить об этом до этого:

struct sampleData {
    int N;
    int M;
    string sample_name;
    string speaker;
};

bool data(sampleData *samples)
{
    samples->N = 10;
    samples->M = 20;
    // etc.
}

И, наконец, вам нужно создать переменную типа sampleData. Например, в вашей функции main():

int main(int argc, char *argv[]) {
    sampleData samples;
    data(&samples);
}

Обратите внимание, что вам нужно передать адрес переменной функции data(), поскольку она принимает указатель.

Однако обратите внимание, что в С++ вы можете напрямую передавать аргументы по ссылке и не нужно "эмулировать" его указателями. Вы можете сделать это вместо:

// 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);
}

Ответ 2

bool data(sampleData *data)
{
}

Вам нужно указать метод, тип которого вы используете. В этом случае sampleData.

Примечание. В этом случае вам необходимо определить структуру до того, как метод будет распознан.

Пример:

struct sampleData
{
   int N;
   int M;
   // ...
};

bool data(struct *sampleData)
{

}

int main(int argc, char *argv[]) {

      sampleData sd;
      data(&sd);

}

Примечание 2: Я парень C. Для этого может быть больше возможностей С++.