2

私はプログラミングに精通していますが、c++ / qt の世界は初めてです。

QtExtSerialPort ライブラリを使用して arduino ボードから入力を読み取るように、qwt ライブラリのオシロスコープの例を変更しています。(はい、私は QtSerial について知っていますが、それを発見したとき、私は実装に少し行き過ぎていました)

arduino はシリアル ポートに値を書き込みます。

1.23
2.33
4.56
2.12
0.32

など。PC がデータを読み取るとき、データはチャンクで読み込まれるため、1 回の読み取りで次のような結果が得られる場合があります。

3
2.33
4

そして次回

.56
2. 

等々。

リーダー スレッドのヘッダー ファイルで、

QString buffer;

そして、読むとき、私はこの関数を使用しています:

double SamplingThread::value( double timeStamp ) const
{
  double v;
  QByteArray inpt;
  int a = port->bytesAvailable();
  inpt.resize(a);
  port->read(inpt.data(), inpt.size());
  QString strng=buffer+QString::fromAscii(inpt); 
  // This concatenates what is left over since last time to what is read now:
  int j=strng.indexOf("\n");
  if(j>-1){
  // if a newline, ie the first number is complete 
    QString s=strng.left(j-1);
    v=s.toFloat();
    s=strng.mid(j+1,-1); // What is to be saved to next time
    buffer =s; // store it in the global buffer
    return v*d_amplitude/5;
  }
}

(はい、2 つの \n を含むチャンクを読み取るとすぐに問題が発生することはわかっています)

グローバルバッファに残っているものを保存できないことを除いて、これは正常に機能します。その行でエラーが発生します:

samplingthread.cpp:89: error: no match for 'operator*=' in
'((const SamplingThread*)this)->SamplingThread::buffer *= s'

これが何を意味するのか、私は常に困惑しています。QString を別の QString にコピーするつもりでしたが ... ? どこかでポインターを台無しにしてしまったことがありますか? たった1行でやるのと何が違うの?( s=strng.right(j+1) )

4

1 に答える 1

3

値関数の「const」を取り除きます。

「const」関数は、そのクラス変数も「const」である場合にのみ関数を呼び出すことができます。そのため、機能する機能と機能しない機能がありました。

于 2012-12-18T20:43:39.977 に答える