2012-04-25 107 views
0

嗨,在我的程序中我有兩個構造函數;C++ undefined reference

BinaryImage(); 

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

在我的主要;

BinaryImage BinaryImageObj(); 

這編譯得很好,但是當我調用第二個construtor;

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

然而這會帶來一個錯誤;

的main.cpp ||未定義參考`BinaryImage :: BinaryImage(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 ; 
} 

binaryimage類(從矩陣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); 

          } 

         } 

} 

主要

Matrix MatrixObj1(MM,NN,data2); 

BinaryImage BinaryImageObj; 

編輯顯示發生了什麼事。

回答

6

您沒有實現構造函數,因此沒有爲它們生成符號。您可以在類定義中實現它們:

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

或在實現文件(推薦)中。

你的第一個例子:

BinaryImage BinaryImageObj(); 

編譯因爲你宣佈一個名爲BinaryImageObj函數,它不帶任何參數,並返回一個BinaryImage,並沒有真正創造如你想BinaryImage對象。

正確的語法是

BinaryImage BinaryImageObj; 
+0

BinaryImage :: BinaryImage(INT MM,INT NN,雙* input_data,雙THRESH):矩陣(MM,NN,input_data)這是我的binaryimage類中它是我相信矩陣類創建的對象,我認爲完全錯過了一些東西:( – nullVoid 2012-04-25 11:02:44

+3

@nullVoid爲什麼不編輯問題併發布整個代碼? – 2012-04-25 11:05:18