一类的多维矩阵

Multidimensional matrix of a class

本文关键字:一类      更新时间:2023-10-16

我是c++新手。

class ProjectionValue{
public:
    int angleLength;
    int detectorIndex_xLength;
    int detectorIndex_yLength;
    double ***matrix; 
    ProjectionValue(int angleLength, int detectorIndex_xLength, int detectorIndex_yLength);
    ~ProjectionValue();
};

我在主类中声明了ProjectionValue类(我的类)的3d矩阵。

ProjectionValue*** A_projection [10][10][5];
for(int x=0; x< A->Tomo->object3d->Nx; x++)
{
    for(int y=0; y< A->Tomo->object3d->Ny; y++)
    {
        for(int z=0; z< A->Tomo->object3d->Nz; z++)
        {
            for( int kk=0; kk<11; kk++) 
            {
                for(int m=0; m < A->Tomo->detector->Nx; m++ )  
                {
                    for(int n=0; n < A->Tomo->detector->Ny; n++ )  
                    {
                        (**A_projection[x][y][z])->matrix[kk][m][n] = A->Tomo->ICD_projection(*A->Tomo->xraysource->Source,*A->Tomo->detector->GetCoordinates(m,n), initial_object, x, y, z);
                    }
                }
                A->Tomo->xraysource->RotateXRaySource(-5);
                A->Tomo->detector->RotateDetector(-5); 
            }   
        }   
    }
}

我取"类型为'System '的未处理异常。AccessViolationException' occurred in Form_Solution.exe '。在这里:

(**A_projection[x][y][z])->matrix[kk][m][n] = A->Tomo->ICD_projection(*A->Tomo->xraysource->Source,*A->Tomo->detector->GetCoordinates(m,n), initial_object, x, y, z);

这个问题我该怎么做,我的类的3d矩阵的声明有什么问题吗?矩阵的分配内存是必要的,我怎么做?

This:

ProjectionValue*** A_projection [10][10][5];

不是"一个ProjectionValue类的3D数组"。它是一个指向ProjectionValue的指针对指针的3D数组。您可能需要:

ProjectionValue A_projection [10][10][5];

除非你想自己分配(和取消分配)所有指针和对象的额外开销。

我会改变你个人的写作方式。除非你想编写自己的动态分配数组类,否则我会使用stl vector。

using std::vector;
class Matrix3D
{
public:
Matrix3D(unsigned x, unsigned y, unsigned z)
{
   data.clear();
   data.resize(x);
   for(unsigned i=0;i<data.size();++i)
   {
      data[i].resize(y);
      for(unsigned j=0;j<data[i].size();++j)
      {
          data[i][j].resize(z);
      }
   }
}
vector< vector< vector< float > > > data;
};

我没有尝试编译这个