Ах, да, я знаю это .... Ну, ваша функция должна выглядеть следующим образом
int dbr(_psoParticle (&pso_CareUnit)[10][2], _psoParticle (&pso_CentralStore)[10],
int particle, unit (&CareUnit)[2], unit ¢ralStore,
int (&totalConsumption)[material], int &totalInventory, int &totalLateness);
Обратите внимание, что для каждого аргумента заданы полные измерения. Теперь причина этого в том, что все ваши массивы статические массивы, поэтому компилятор должен знать, что это с самого начала, до того, как вы запустите свою программу. Чтобы он мог делать причудливые свистки и свистки, как sizeof(arr)
и for(T obj: arr){}
, а что нет.
Теперь, как вы могли заметить, такой способ работы - беспорядок. У вас есть несколько вариантов, чтобы сделать его лучше. Минимум усилий - заменить типы аргументов на шаблоны. как
template<typename T1, typename T2, etc...
int dbr(T1 &pso_CareUnit, T2 & pso_CentralStore...
Тогда компилятор сам выяснит, какого черта вы все это кормите. Вы также можете передавать их как указатели, тогда некоторая информация будет потеряна, и вам придется как-то передавать измерения, но что угодно ...
int dbr(_psoParticle ** pso_CareUnit, _psoParticle *pso_CentralStore,...
Вы также можете использовать типы stl, такие как std :: vector
int dbr(std::vector<std::vector<_psoParticle>>& pso_CareUnit, std::vector<_psoParticle>& pso_CentralStore,...
Вы также можете инкапсулировать все это, как
struct Container{
_psoParticle careUnit[10][2];
_psoParticle centralStore[10];
};
int dbr(Container & iContainer...
или даже лучше
class Pso{
public:
int dbr(...
private:
_psoParticle careUnit[10][2];
_psoParticle centralStore[10];
// ... the rest of arguments
};
Есть также несколько более прикольных способов справиться с этим, таких как итераторы и еще много чего. Но в вашем случае я думаю, что простого решения с указателем или инкапсуляции будет достаточно. Хотя я бы предупредил вас в будущем воздерживаться от использования структур и массивов в стиле C, с ними надоело иметь дело, и для этого есть множество отличных контейнеров STL. И это соглашение о присвоении имен является очень странным, обратитесь к руководству по Google или GNU C ++ для советов по стилю.