2012-04-25 21 views
0

こんにちは私のプログラムでは2つのコンストラクタがあります。C++定義されていない参照

BinaryImage(); 

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

私のメインでは、

BinaryImage BinaryImageObj(); 

これはうまくコンパイルされますが、2番目のconstrutorを呼び出すとコンパイルされます。

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

これはエラーです。

main.cppに||(、int型、int型、ダブル*ダブル) `二値::二値への参照は未定義」

なぜそれがこれを行うん?私は、単純な何かが足りないのですか?

おかげ

マイク

この行列クラスのコンストラクタは、オブジェクト

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 ; 
} 

二値クラス(マトリックスからinherts)

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); 

          } 

         } 

} 

メイン

0123を作成し、

whats going onを表示するように編集しました。

答えて

6

コンストラクタを実装していないため、シンボルが生成されません。

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

または実装ファイル(推奨)に実装することができます。

あなたの最初の例:あなたはパラメータを取らず、BinaryImageを返し、あなたが思うだろうとして、実際にBinaryImageオブジェクトを作成していないBinaryImageObj呼び出される関数を宣言しているので

BinaryImage BinaryImageObj(); 

がコンパイルされます。

正しい構文は

BinaryImage BinaryImageObj; 
+0

二値である::二値(MM int型は、NN、ダブル* INPUT_DATA、二重のスレッシュをint型):マトリックス(MM、NNは、INPUT_DATA)これは私の二値クラス内でそれがすることでしたマトリックスクラスがオブジェクトを作成したという私の信念、私はiveが完全に何かを逃したと思う:( – nullVoid

+3

@nullVoidなぜ質問を編集して全体のコードを投稿しないのですか? –

関連する問題