2016-07-23 36 views
0
#ifndef _grid_h 
#define _grid_h 

#include<string> 

using namespace std; 

template<typename T> 
class grid{ 
    T** main; 

public: 

    grid<T>(){} 


    grid<T>(int col, int row){ 
     main = new T[col];   //<-this line gives me error C2440: 
            //'=' : cannot convert from 'int *' to 'int **' 
     for(int i =0;i<col;i++) 
      main[i]=new T[row]; 
    } 
}; 

#endif 

独自のバージョンのGridクラスを作成したいとします。基本的には、Tの2次元配列に情報を保存したいと思います。これを行うのが最も効率的な方法だと思います。どうすればこのエラーを回避できますか?エラーC2440: '=': 'int *'から 'int **'に変換できません

答えて

0

mainTへのポインタの配列であるため、それは

main = new T*[col]; 

する必要があります。しかし、2次元配列を作成するためのより良い方法は、答えはあなたの最後のコード行である例

std::vector<std::vector<T>> main(col, std::vector<T>(row)); 
0

main = new T[col];の代わりにmain = new T*[col];を使用して、正しいタイプの配列を割り当てます。

0

のために、あります。仕事にそのために

main[i]=new T[row]; 

main[i]ポインタである必要があります。しかしをnew T[col] - Tの配列として作成しようとしました。 Tへのポインタの配列である必要があります。

main = new T*[col]; // Create an array of pointers 
関連する問題