2013-03-19 43 views
-1

我是C++新手。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); 

      } 
     } 
    } 
} 

我把「在Form_Solution.exe中出現'System.AccessViolationException'類型的未處理的異常」。它在這裏:

(**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矩陣類的聲明中有什麼問題嗎?矩陣的分配內存是必需的,我該怎麼做?

+1

你還沒有爲你的矩陣分配內存 – SomeWittyUsername 2013-03-19 16:43:46

+0

我該如何分配這個矩陣? – 2013-03-19 16:47:26

+0

[三星程序員]的必須鏈接(http://c2.com/cgi/wiki?ThreeStarProgrammer)。 – 2013-03-19 17:34:54

回答

0

此:

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

不是 「ProjectionValue類的3D陣列」。它是指向指向ProjectionValue指針的指針的3D數組。你可能想:

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

,除非你想有分配(和取消分配)中的所有指針的額外開銷和對象自己。

+0

我確實喜歡你的,但是我遇到錯誤:ProjectionValue':沒有合適的默認構造函數可用。我如何安排我的ProjectionValue構造函數? – 2013-03-19 20:11:31

+0

爲了分配這樣的對象的靜態數組,你的'ProjectionValue'類需要有一個默認的構造函數(不帶任何參數)。如果這是不可行的,你將不得不解決指向動態分配的內存路由的指針。 – twalberg 2013-03-19 20:18:59

0

我會改變你寫這個人的方式。除非要編寫自己動態分配的數組類,否則我只會使用stl向量。

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; 
}; 

我還沒有試過編譯過。