2

512 個の要素を数行含むテキスト ファイルを読み取るプログラムを作成しようとしています。これらはタブで区切られた番号で、ファイルの最初の行にはファイル自体に関する一般的な情報が含まれています。外観は次のとおりです。

512測定値:Thu 12. Jun 18:35:44 2014コメント:
NIL 2.4155 1.60983 1.08339 0 2.13321 0 0.848402 0 0.747692 0 0.146487 0 1.98062 0 0.846876 0 1.8791 0.10 0 0.100 0.10 0.10 0.10 0.100 0.100 0.100 0.1494 0.1134 0 0 1.83566 0 2.54826 0 0 0 0 0 1.80819 0 0 0 0 0 4.78523 0 1.99283 0 2.63676 0 2.19272 0 0.962844 0.256352 0.762951 0.581369 0 0 0 0.689708 1.38552 2.38193 1.11391 3.22118 0.712596 0 0.508125 0 0 0.842298 0 0.794995 0.967422 0.820935 0.0534066 2.67338 0

などなど

512 列のそれぞれは個別のデータ ストリームを表し、行は時間の経過とともにサンプリングされます。プログラムはデータの積分を計算して、512 個の要素を持つベクトルを吐き出します。各要素は、それぞれの列のすべてのデータの合計です。

積分部分は正常に動作します。qDebug を使用してベクトルの出力を出力できますが、ベクトルをテキスト ファイルに書き込もうとするとエラーが発生します。

私が使用しているコードは次のとおりです。

void MainWindow::on_pushButton_clicked()

QVector<double> SingleLineData;
SingleLineData.resize(512);
QString test;
QString inputfile = QFileDialog::getOpenFileName(
            this,
            tr("Open File"),
            "/Users",
            "All files (*.*)"
            );

if(inputfile != ""){
QFile file(inputfile);


if(!file.open(QFile::ReadOnly)){
   }
QTextStream in(&file);


    double buffer;

    while(!file.atEnd()){
        in.readLine();
        for(int i=0; i<512; i++){
            in >> buffer;
            SingleLineData[i]+=buffer;
        }
    }

}
    qDebug() << SingleLineData;

// ************* ファイル出力 ********************************* ****************

QString filename = "/Users/Mitch/Desktop/integral.txt";
QFile fileout(filename);
if (fileout.open(QFile::ReadWrite | QFile::Text)){
}
     QTextStream out(&fileout);
     out << SingleLineData;
     fileout.close();

}

エラーは次のように表示されます。

エラー: バイナリ式 ('QTextStream' および 'QVector') に対するオペランドが無効であり、実行できない候補関数: 'QVector' から 'const void *' への最初の引数の既知の変換はありません。& QTextStream &operator<<(const void *ptr); で引数のアドレスを取得します。

どんな助けでも大歓迎です!:)

4

2 に答える 2

2

これが反復メソッドです。QTextStream の演算子は、ベクトルを受け入れるためにオーバーロードされていません。ただし、ダブルを受け入れることはできます。

QString filename = "/Users/Mitch/Desktop/integral.txt";
QFile fileout(filename);
if (fileout.open(QFile::ReadWrite | QFile::Text)){
 QTextStream out(&fileout);
 for (Qvector<double>::iterator iter = SingleLineData.begin(); iter != SingleLineData.end(); iter++){
     out << *iter;
 }
 fileout.close();
}
于 2015-02-27T07:37:16.080 に答える
1

エラー メッセージが示すように、QTextStreamを受け取るオーバーロードはありませんQVector<double>が、 for がありdoubleます。したがって、要素を反復処理して、個別にスチーム処理するだけです。

于 2015-02-27T07:27:32.047 に答える