0

こんにちは、私のプログラムには 2 つのコンストラクターがあります。

BinaryImage();

BinaryImage(int MM, int NN, double* input_data, double thresh);

私のメインでは。

BinaryImage BinaryImageObj();

これは正常にコンパイルされますが、2 番目のコンストラクターを呼び出すと、

BinaryImage BinaryImageObj2(MM,NN,data,1);

ただし、これによりエラーが発生します。

main.cpp ||「BinaryImage::BinaryImage(int, int, double*, double)」への未定義の参照

なぜこれを行うのですか?単純なものが欠けていますか?

ありがとう

マイク

このマトリックス クラス コンストラクターはオブジェクトを作成します

Matrix::Matrix(int MM, int NN, double* input_data){

                      M = MM;
                      N = NN;
                      data = new double[M * N];
                      for ( int i =0; i < M; i++)
                      {
                          for (int j = 0; j < N; j++)
                          {
                              data[i* N+j] = input_data[i*N+j];
                           //   cout << data[i*N+j] <<"\t";
                          }
                      //    cout <<"\n";
                      }

           cout << "This is the Matrix Constructor being invoked" << endl ;
}

binaryimage クラス (マトリックスから継承)

BinaryImage::BinaryImage(int MM, int NN, double* input_data, double thresh ):Matrix(MM, NN, input_data)
{
                      M = MM;
                      N = NN;
                      data = new double[M * N];
                      for ( int i =0; i < M; i++)
                      {
                          for (int j = 0; j < N; j++)
                          {
                              treshData(tresh);

                          }

                      }

}

主要

Matrix MatrixObj1(MM,NN,data2);

BinaryImage BinaryImageObj;

何が起こっているかを示すために編集されました。

4

1 に答える 1

6

コンストラクターを実装していないため、コンストラクターのシンボルは生成されません。それらはクラス定義内に実装できます。

BinaryImage() { };
BinaryImage(int MM, int NN, double* input_data, double thresh) { };

または実装ファイル(推奨)。

あなたの最初の例:

 BinaryImage BinaryImageObj();

BinaryImageObjパラメータを受け取らずにを返すと呼ばれる関数を宣言しているためにコンパイルされBinaryImage、実際には思ったようにBinaryImageオブジェクトを作成していません。

正しい構文は次のとおりです。

 BinaryImage BinaryImageObj;
于 2012-04-25T10:57:59.627 に答える