有默認值的情況,默認值只能放在參數列表的最後面,不能放在中間或前面。
在C++頭文件中定義函數的時候,編譯報如下錯誤:
其中頭文件中函數定義如下:
#ifndef __TNNR_H_
#define __TNNR_H_
#include <opencv2/opencv.hpp>
#include <iostream>
#include <cmath>
using namespace std;
using namespace cv;
Mat APGL(Mat &A, Mat &B, Mat &X, Mat &M, Mat &mask, float eps, float lambda);
Mat TNNR(Mat &im0, Mat &mask, int lower_R, int upper_R, float lambda = 0.06);
Mat APGLLRL0PHI(Mat &A, Mat &B, Mat &X, Mat &M, Mat &mask, float eps, float lambda,Mat &J);
Mat TNNRLRL0PHI(Mat &im0, Mat &mask, int lower_R, int upper_R, float lambda = 0.06,Mat &J);
#endif
錯誤的原因就錯在最後一個函數的lambda參數上,這個參數是有默認值的,而在C++中定義函數有開頭那句話:
有默認值的情況,默認值只能放在參數列表的最後面,不能放在中間或前面。
所以解決方法是把默認值去掉或者更改參數的位置即可。