コピーコンストラクタに問題があります。C++クラスのコピーコンストラクタ
次のように私はクラスのMyDataを持っている:私のメインプログラムで
class MyData
{
private:
std::vector<double> wavelength;
std::vector<double> amplitude;
public:
MyData::MyData(void) {}
MyData::MyData(const MyData &cSource)
: wavelength(cSource.wavelength), amplitude(cSource.amplitude)
{}
}
を、私はリングバッファへのMyDataオブジェクトを挿入しています。これは私がメインでそれを読んでいる方法です:
MyData data;
data = removeq(&q);
問題は、コピーされたデータに値がないことがあります。等波長の元のサイズが1の場合、コピーされたデータは0を表示します。私は私のプログラムをデバッグして、リングバッファ内のデータは正しいなど1の正しいサイズを示しています。
誰かが私コピーコンストラクタが間違っているか、私は代入演算子のオーバーロードが必要ですか?
ありがとうございます!
私は、挿入のために使用されるコード/リングバッファに削除:
void insertq(struct queue *p, MyData v)
{
int t;
t = (p->rear+1)%MAX;
if(t == p->front)
{ }
else
{
p->rear = t;
p->arr[p->rear] = v;
}
}
MyData removeq(struct queue *p)
{
MyData empty;
if(isempty(p))
{
return empty;
}
else
{
p->front = (p->front + 1)%MAX;
empty = p->arr[p->front];
return empty;
}
}
コピーコンストラクタは問題ありません(コンパイラーが自動生成するもの、btwと同じです)。問題は 'removeq()'とその設計にあります。すでに構築されているオブジェクトに対してコピーコンストラクタをどのように呼び出すと思いますか? 'removeq'でコピーコンストラクタを使う方法を教えてください。 – Cameron
ここに明示的にcopy ctorを書く必要はありません。デフォルトのものは同じことをします。 –
割り当てオーバーロードを追加しようとしましたか?書き込みとテストにはわずか1〜2分かかります。コピーコンストラクタは正常に見えます。関連するコードをいくつか投稿すると役立つかもしれません。 – fileoffset