Как объявить глобальную переменную 2d 3d 4d … array (heap version), которая может использоваться во всей программе?

class1.cpp

int a=10; int b=5; int c=2; //for this array[a][b][c] int*** array=new int**[a]; for(int i =0; i<a; i++) { array[i] = new int*[b]; for(int k =0; k<b; k++) { array[i][k] = new int[c]; } } 

как я могу использовать этот массив в других .cpp-файлах?

Вместо того, чтобы вручную выделять массив, вы должны хотя бы использовать std::vector . Что бы вы сделали, это иметь заголовочный файл, содержащий

 extern std::vector>> data; 

что вы будете включать во все файлы cpp, которые вы хотите разделить с вектором, а затем в одном файле cpp,

 std::vector>> data = std::vector(a, std::vector>(b, std::vector(c))); 

и теперь у вас будет глобальный объект, который является общим и имеет управляемый ресурс.


Однако вы не должны использовать вложенный вектор. Он может разбросать данные в памяти, чтобы он не очень дружественный к кешу. Вы должны использовать class с одним размерным вектором и притворяться, что он имеет несколько измерений с использованием математики. Очень простой пример этого будет выглядеть

 class matrix { std::vector data; int row; // this really isn't needed as data.size() will give you rows int col; int depth; public: matrix(int x, int y, int z) : data(x * y * z), row(x), col(y), depth(z) {} int& operator()(int x, int y, int z) { return data[x + (y * col) + (z * col * depth)]; } }; 

и тогда заголовочный файл будет

 extern matrix data; 

и один файл cpp будет содержать

 matrix data(a, b, c); 

Предпочитаете std::array или std::vector для сырых массивов. У вас были постоянные размеры, поэтому используйте std::array . Объявите его в заголовочном файле:

 // header.h #pragma once // or use multiple inclusion guards with preprocessor #include  const int a = 10; const int b = 5; const int c = 2; using Array3D = std::array,b>,a>; extern Array3D array3d; // extern indicates it is global 

Определите его в файле cpp:

 // class1.cpp #include "header.h" Array3D array3d; 

Затем включите заголовок везде, где вы хотите его использовать.

 // main.cpp #include "header.h" int main() { array3d[3][2][1] = 42; } 

Я не уверен, что понял, что именно вы имеете в виду, но просто:

 class1 obj1; obj1.array[i][j][k] // assuming you make the array public and already initialized in the constructor(and dont forget to delete it in the destructor)