Создание массива структур в C ++ - PullRequest
3 голосов
/ 30 августа 2011

Я работаю над заданием, которое требует от меня использования " массива структур ". Я сделал это один раз для другого задания для этого проф, используя этот код:

struct monthlyData {
    float rainfall;
    float highTemp; 
    float lowTemp;  
    float avgTemp;  
} month[12];

Что отлично сработало, но я получил баллы за глобальный массив. Что я должен сделать вместо этого, чтобы избежать этого? Я совсем не касался C ++ все лето, поэтому сейчас я довольно ржавый и не знаю, с чего начать.

Ответы [ 3 ]

4 голосов
/ 30 августа 2011

Просто определите структуру как:

struct monthlyData {
    float rainfall;
    float highTemp; 
    float lowTemp;  
    float avgTemp;  
};

А затем создайте массив этой структуры в функции, где вам это нужно:

void f() {
    monthlyData month[12];
    //use month
}

Теперь массив не является глобальной переменной. Это локальная переменная, и вы должны передать эту переменную другим функциям, чтобы другие функции могли использовать такой же массив А вот как вы должны это пройти:

void otherFunction(monthlyData *month) {
    // process month
}

void f() {
    monthlyData month[12];
    // use month
    otherFunction(month);
}

Обратите внимание, что otherFunction предполагает, что размер массива равен 12 (постоянное значение). Если размер может быть любым, тогда вы можете сделать это вместо:

void otherFunction(monthlyData *month, int size) {
    // process month
}

void f() {
    monthlyData month[12];
    // use month
    otherFunction(month, 12); //pass 12 as size
}
2 голосов
/ 30 августа 2011

ну, вы можете объявить массив только внутри метода, который в этом нуждается:)

struct monthlyData
{
  float rainfall;
  float highTemp; 
  float lowTemp;  
  float avgTemp;  
};

int main()
{

  monthlyData month[12];

}

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

0 голосов
/ 30 августа 2011

Сначала объявите структуру

struct monthlyData { 
   float rainfall; 
   float highTemp;  
   float lowTemp;   
   float avgTemp;   
};

Затем используйте, например,

void foo()
{
   struct monthlyData months[12];
   ....

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...