C++未定义的引用

nul*_*oid 0 c++ undefined-reference

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

BinaryImage();

BinaryImage(int MM, int NN, double* input_data, double thresh);
Run Code Online (Sandbox Code Playgroud)

在我的主要;

BinaryImage BinaryImageObj();
Run Code Online (Sandbox Code Playgroud)

编译好,但是当我调用第二个construtor时;

BinaryImage BinaryImageObj2(MM,NN,data,1);
Run Code Online (Sandbox Code Playgroud)

然而这会带来错误;

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 ;
}
Run Code Online (Sandbox Code Playgroud)

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

                          }

                      }

}
Run Code Online (Sandbox Code Playgroud)

主要

Matrix MatrixObj1(MM,NN,data2);

BinaryImage BinaryImageObj;
Run Code Online (Sandbox Code Playgroud)

编辑以显示最新情况.

Luc*_*ore 6

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

BinaryImage() { };
BinaryImage(int MM, int NN, double* input_data, double thresh) { };
Run Code Online (Sandbox Code Playgroud)

或在实施文件中(推荐).

你的第一个例子:

 BinaryImage BinaryImageObj();
Run Code Online (Sandbox Code Playgroud)

编译,因为你声明一个被调用的函数BinaryImageObj,它不带参数并返回一个BinaryImage,而不是BinaryImage像你想象的那样实际创建一个对象.

正确的语法是

 BinaryImage BinaryImageObj;
Run Code Online (Sandbox Code Playgroud)

  • @nullVoid为什么不编辑问题并发布整个代码? (3认同)