2012-04-29 10 views
0

私が持っているQByteArrayごとに1つずつ、約4つのQDataStreamの配列を作成しようとしています。次のように
状況は次のとおりです。QByteArraysに基づいてQDataStreamの配列を作成する方法

struct dataform{ 
    //other members 
    QDataStream block; 
} 
dataform gd[4]; 
//initialize data for each item in gd[] 
QDataStream out[4]; 
for (int i = 0; i < 4; ++i){ 
    out[i] = QDataStream(&gd[i].block, QIODevice::WriteOnly); 
} 

コンパイラは私も無駄に

out[i](&gd[i].block, QIODevice::WriteOnly); 

と一緒に初期化しようとしてい

‘QDataStream& QDataStream::operator=(const QDataStream&)’ is private

を返します。コンパイラはこれを行うか、私は、配列QDataStreamポインタの配列を作成し、動的にQDataStreamsを割り当て、プログラム全体の流れにごと(数百倍を欽慕する必要が行うにはどのような方法があります

error: no match for call to ‘(QDataStream) (QByteArray*, QIODevice::OpenModeFlag)’

を返します。 )時間私はそれに書き込みますか?

答えて

2

ポインタを使用せずにこれを行うことができますが、dataform構造体にQBufferを追加する必要があります。 (テストされていない)のような

何か:

struct dataform{ 
    //other members 
    QBuffer buffer; 
    QDataStream block; 
} 

dataform gd[4]; 
QDataStream out[4]; 
for (int i = 0; i < 4; ++i){ 
    dg[i].buffer.setBuffer(&gd[i].block); 
    dg[i].buffer.open(QIODevice::WriteOnly); 
    out[i].setDevice(&dg[i].buffer); 
} 

(。QDataStreamコンストラクタQByteArrayを取るドキュメントによると、内部QBuffer使用しています)

+0

おかげで、これは動作します。私はバッファ配列をデータストリームを宣言したのと同じ場所に置くことになりましたが、同じことです。 – QuantumRipple