Я - прерывистый программист и, похоже, недавно забыл множество основ.Функция, возвращающая указатель на массив const 2-d (C++)
Я создал класс SimPars
для хранения нескольких двумерных массивов; один показан ниже: demPMFs
. Я собираюсь передать указатель на экземпляр SimPars
другим классам, и я хочу, чтобы эти классы могли читать массивы с использованием функций доступа SimPars
. Скорость и память важны.
Я знаю, что жизнь часто проще с векторами, но в этом случае я бы очень хотел придерживаться массивов.
Как написать функции доступа для массивов? Если меня интересует индекс n-го массива, как мне получить доступ к нему с помощью возвращаемого указателя? (Должен ли я писать отдельную функцию доступа для определенного индекса массива?) Что ниже, конечно, неверно.
// SimPars.h
#ifndef SIMPARS_H
#define SIMPARS_H
#include "Parameters.h" // includes array size information
class SimPars {
public:
SimPars(void);
~SimPars(void);
const double [][ INIT_NUM_AGE_CATS ] get_demPMFs() const;
private:
double demPMFs[ NUM_SOCIODEM_FILES ][ INIT_NUM_AGE_CATS ];
};
#endif
// SimPars.cpp
SimPars::SimPars() {
demPMFs[ NUM_SOCIODEM_FILES ][ INIT_NUM_AGE_CATS ];
// ...code snipped--demPMFs gets initialized...
}
//...destructor snipped
const double [][ INIT_NUM_AGE_CATS ] SimPars::get_demPMFs(void) const {
return demPMFs;
}
Я был бы очень признателен за некоторые объяснения предлагаемых решений.
Я уверен, что декларация члена 'double demPMFs [] [INIT_NUM_AGE_CATS];' является незаконной. Это действительно компилируется? – fredoverflow
Спасибо, что поймали это. Исправлена опечатка. У меня был размер в исходном коде. – Sarah
Не могли бы вы подробно рассказать о том, чего вы на самом деле пытаетесь достичь? рассмотрите 2-мерный массив как массив указателей: 'demPMFs **', тогда вам не нужно указывать какой-либо размер в возвращаемом типе, как в 'const double [] [INIT_NUM_AGE_CATS] get_demPMFs() const;' ... – nus