C++未定义的引用

C++ undefined reference

本文关键字:引用 未定义 C++      更新时间:2023-10-16

嗨,在我的程序中,我有两个构造函数;

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

在我的主要;

BinaryImage BinaryImageObj();

这编译得很好,但是当我调用第二个解释器时;

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

但是,这会带来错误;

主.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(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;

编辑以显示正在发生的事情。

您没有实现构造函数,因此不会为它们生成任何符号。您可以在类定义中实现它们:

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

或在实现文件中(推荐)。

您的第一个示例:

 BinaryImage BinaryImageObj();

编译是因为您声明了一个名为 BinaryImageObj 的函数,该函数不带参数并返回BinaryImage,并且实际上并没有像您想象的那样创建BinaryImage对象。

正确的语法是

 BinaryImage BinaryImageObj;