2012-04-25 110 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