2017-06-27 20 views
0

私のHDF5データセットの次元を使用して配列を作成したいと思います。私は私のデータセットの寸法を見つけるために次のコードを使用しています。私はC++ HDF5データセットの次元をconst intとして使用する

double myArr[xrows*yrows]; 

を使用してアレイを作成しようとすると

#include <iostream> 
#include <string> 
#include <vector> 
#include <iomanip> 
#include <typeinfo> 

#include "H5cpp.h" 

using namespace H5; 
int main() { 
    std::string sFileName; 
    sFileName = "test.h5"; 

    const H5std_string FILE_NAME(sFileName); 
    const H5std_string DATASET_NAME("timestep:5.0"); 
    H5File file(FILE_NAME.c_str(), H5F_ACC_RDONLY); 
    DataSet dataset = file.openDataSet(DATASET_NAME.c_str()); 

    DataSpace dataspace = dataset.getSpace(); 
    int rank = dataspace.getSimpleExtentNdims(); 

    // Get the dimension size of each dimension in the dataspace and display them. 
    hsize_t dims_out[2]; 
    int ndims = dataspace.getSimpleExtentDims(dims_out, NULL); 
    std::cout << "rank " << rank << ", dimensions " << 
     (unsigned long)(dims_out[0]) << " x " << 
     (unsigned long)(dims_out[1]) << std::endl; 

    const int xrows = static_cast<int>(dims_out[0]); //120 
    const int yrows = static_cast<int>(dims_out[1]); //100 

    std::cout << xrows * yrows << std::endl; //12000 

    double myArr[xrows] // this also produces an error saying xrows is not a constant value 
} 

はしかし、私はxrowsとyrowsは一定値ではありませんというエラーを取得します。これを回避するにはどうしたらいいですか?

答えて

0

このような配列のサイズは、コンパイル時に決定される定数式でなければなりません(例えば、this link参照)。あなたの場合は、dynamic memoryまたはstd :: vectorなどのSTLコンテナを使用できます。

1

double array[c]のみcが一定値であれば動作します。

const int c = 10; 
double array[c]; //an array of 10 doubles 

cが動的である場合は、あなたがnewを使用します。

int c = 5; 
c *= 2; //c=10 
double *array = new double(c); 
+0

xrowsとyrowsは定数値、とてもはずのxrowsです* yrowsはとして一定でありますまあ? –

+0

いいえ。計算が完了すると、 'const'は失われます。 'const'はコンパイラの問題です。微積分は実行時に行われます。 – Ripi2

+0

私はdouble myArr [xrows]を試してもうまくいきません。それは私が1と定義しても、xrowsは定数ではないと考えます。 –

関連する問題