0

C++ でコードを書くことを学んでいますが、演算子に問題があります。私はこのクラスを作成しました:

typedef float data_type;

class eucVector
{
  public:
    unsigned int dim;
    data_type *vdata;

    eucVector();
    eucVector(unsigned int);
    eucVector(unsigned int, data_type*);
    ~eucVector();

    void print();

    eucVector operator + (eucVector);
};

このクラスは基本的に、可変サイズ (dim) のユークリッド ベクトルであり、演算子 + は関連するベクトルのすべてのエントリを単純に追加します。

これはその演算子の実装です:

eucVector eucVector::operator + (eucVector y)
{
  eucVector c(dim);

  for (unsigned int i=0; i<dim; i++)
  {
    c.vdata[i] = vdata[i] + y.vdata[i];
  }

  return c;
}

これで、メイン関数は次のようになります。

int main()
{
  eucVector a(3), b(3), c;

  for (int i=0; i<3; i++)
  {
    a.vdata[i] = 3*i-1;
    b.vdata[i] = 2*i +3;
  }

  cout << "a = ";
  a.print();
  cout << "b = ";
  b.print();

  cout << endl;

  c = a+b;

  cout << "a = ";
  a.print();
  cout << "b = ";
  b.print();

  cout << endl << "c = ";
  c.print();

  return 0;
}

結果はゼロで満たされたベクトル c であり、さらに重要なことに、それを変更するコマンドがないベクトル b は、「c=a+b;」の後の最初の 2 つのエントリを変更します。ライン。

何が起こっているのかわからず、昨日から対処しています。このような単純な機能を動作させることができないのは少しイライラします...助けてください!

どうもありがとうございました。

PS: 問題があるかどうかはわかりませんが、Code::Blocks を IDE として使用しており、Windows 8 を搭載した PC を使用しています。

これは他の機能です:

eucVector::eucVector()
{
  dim = 0;
  vdata = NULL;
}

eucVector::eucVector(unsigned int newDim)
{
  dim = newDim;
  vdata = (data_type *)calloc(dim, sizeof(data_type));
}

eucVector::eucVector(unsigned int newDim, data_type* newdata)
{
  dim = newDim;
  vdata = (data_type *)calloc(dim, sizeof(data_type));

  for(unsigned int i=0; i<dim; i++)
  {
    vdata[i] = newdata[i];
  }
}

eucVector::~eucVector()
{
  free(vdata);
}

void eucVector::print()
{
  for (int i=0; i<dim-1; i++)
   cout << vdata[i] << ", ";


  cout << vdata[dim-1] << endl;
}
4

1 に答える 1