Передача строки статического 2-го массива в функцию в C ++ - PullRequest
0 голосов
/ 21 июня 2010

Это действительно элементарный вопрос. Тем не менее, я не нашел решения после изучения десятков полу релевантных примеров в Интернете.

У меня есть двумерный массив значений типа double, размер которого известен во время компиляции: double demPMFs[ NUM_DEM_PARAMS ][ NUM_AGE_CATEGORIES ]. Записи массива заполняются входными файлами в начале программы. Я бы хотел передать отдельные строки в виде одномерных массивов функциям позже в программе. В идеале я хотел бы сохранить отдельные имена для каждой строки:

#define LSPAN_PMF demPMFs[0][]
#define FLEDGE_PMF demPMFs[1][]
#define PAIR_PMF demPMFs[2][]
#define BIRTH_AGE_PMF demPMFs[3][]
#define SPLIT_AGE_PMF demPMFs[4][]

(Здесь NUM_DEM_PARAMS = 5;). Ниже приведена неудачная попытка передать строку функции:

int calcDeath( double demPMFs[][ NUM_AGE_CATEGORIES ] ) {
  int age_death = rmultinom( LSPAN_PMF, NUM_AGE_CATEGORIES );
  return age_death;
} 

int rmultinom( const double p_trans[], int numTrans )
   // ...[code snipped]...
}

Теперь я получаю ошибки компилятора о прототипах; Я ожидаю также столкнуться с проблемами с объявлением const. Я могу вдаваться в подробности ошибок, если люди считают, что они актуальны, но я подозреваю, что многое уже можно исправить.

1 Ответ

2 голосов
/ 21 июня 2010

Вместо использования array[index][], используйте array[index]:

#define LSPAN_PMF demPMFs[0]
// ... etc.

Но зачем так много работать с массивами?Использование именованных индексов было бы намного понятнее:

enum {
    IndexLspan,
    IndexFledge,
    // ...
};

int calcDeath( double demPMFs[][ NUM_AGE_CATEGORIES ] ) {
    int age_death = rmultinom( demPMFs[IndexLspan], NUM_AGE_CATEGORIES );

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

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