2017-09-10 23 views
-1

配列を使用するクラスを作成する必要があります。配列は、オブジェクトの構築時に(実際の数で)定義された可変長を持つことができます。これは、コンパイル時にサイズがわかっていることを意味します。半動的に定義された配列を作成する

私はサイズを入力してそのサイズでオブジェクトを構築できるテンプレートを作成しようとしました。このようにしても配列を使用できます。

しかし、このコードはコンパイルされません。

クラステンプレートを使用するにはテンプレート引数リストが必要です

私は間違っていますか?

時間:

#pragma once 

class BinaryMemoryReader; 

template <int bytesPerValue> 
class ChunkBlockChannel 
{ 
public: 
    std::map<unsigned int, unsigned char[bytesPerValue * 1024]> cbcLayer; 
    std::map<unsigned int, unsigned char[bytesPerValue]> jj; 

    void read(BinaryMemoryReader &reader); 

    ChunkBlockChannel(); 
    ~ChunkBlockChannel(); 
}; 

CPP:

#include "ChunkBlockChannel.h" 

#include "BinaryMemoryReader.h" 

template <int bytesPerValue> 
void ChunkBlockChannel::read(BinaryMemoryReader &reader) { 

    for (int i = 0; i < 64; ++i) { 
     bool flag; 
     reader.read<bool>(flag); 

     std::vector<unsigned char> cbcLayerData; 
     std::vector<unsigned char> jjData; 

     if (!flag) { 
      unsigned char data[bytesPerValue * 1024]; 
      reader.readBytes(data, bytesPerValue * 1024); 
      cbcLayer[i] = data; 
     } else { 
      unsigned char data[bytesPerValue]; 
      reader.readBytes(data, bytesPerValue); 
      jj[i] = data; 
     } 
    } 
} 

template <int bytesPerValue> 
ChunkBlockChannel::ChunkBlockChannel() {} 

template <int bytesPerValue> 
ChunkBlockChannel::~ChunkBlockChannel() {} 
+3

を意味ですか? – user0042

+1

オブジェクトの作成時に配列のサイズを知っている必要があると言うのは、コンパイル時に配列のサイズを知ることと同じではありません... –

+0

私は知っている、私はちょうどすべてが単一の値で異なります。おそらく、配列を使用する必要があります。 – Karlovsky120

答えて

2

はたぶん他の存在ですが...あなたはメソッド定義でのテンプレート引数を忘れてしまいました。

代わりに生の配列の `のstd :: array`を使用していないのはなぜ

template <int bytesPerValue> 
void ChunkBlockChannel<bytesPerValue>::read(BinaryMemoryReader &reader) { 
//  remember this ^^^^^^^^^^^^^^^ 

template <int bytesPerValue> 
ChunkBlockChannel<bytesPerValue>::ChunkBlockChannel() {} 
//  and this ^^^^^^^^^^^^^^^ 

template <int bytesPerValue> 
ChunkBlockChannel<bytesPerValue>::~ChunkBlockChannel() {} 
//  and this ^^^^^^^^^^^^^^^ 
+0

ええ、それは、ありがとう! – Karlovsky120

関連する問題