C++ 使用c+;从.dll调用带有默认参数的函数+;

C++ 使用c+;从.dll调用带有默认参数的函数+;,c++,function,dll,C++,Function,Dll,我在.dll的头中定义了一个函数 void calculo(vector<double> A, vector<int> B, double &Ans1, double jj); 尝试将标准参数值添加到函数指针类型声明: typedef void(_stdcall*f_funci)(向量A、向量B、双值&Ans1、双值jj=36.5) 默认参数值是函数签名的一部分,编译器不会将其放入函数代码中。尝试将标准参数值添加到函数指针类型声明中: typedef void(

我在.dll的头中定义了一个函数

void calculo(vector<double> A, vector<int> B, double &Ans1, double jj);

尝试将标准参数值添加到函数指针类型声明:

typedef void(_stdcall*f_funci)(向量A、向量B、双值&Ans1、双值jj=36.5)


默认参数值是函数签名的一部分,编译器不会将其放入函数代码中。

尝试将标准参数值添加到函数指针类型声明中:

typedef void(_stdcall*f_funci)(向量A、向量B、双值&Ans1、双值jj=36.5)

默认参数值是函数签名的一部分,编译器不会将其放入函数代码中。

:

只允许在函数声明的参数列表中使用

如果不希望在标头中默认参数,则可以通过重载函数来完成尝试执行的操作:

void calculo(const vector<double>& A, const vector<int>& B, double &Ans1, const double jj);
void calculo(const vector<double>& A, const vector<int>& B, double &Ans1) { calculo(A, B, Ans1, 36.5); }
void calculo(const vector&A、const vector&B、double&Ans1、const double jj);
void calculo(const vector&A,const vector&B,double&Ans1){calculo(A,B,Ans1,36.5);}
作为额外的注释,请通过常量引用传递
vector
s,因为传递值会产生潜在的昂贵复制成本。

:

只允许在函数声明的参数列表中使用

如果不希望在标头中默认参数,则可以通过重载函数来完成尝试执行的操作:

void calculo(const vector<double>& A, const vector<int>& B, double &Ans1, const double jj);
void calculo(const vector<double>& A, const vector<int>& B, double &Ans1) { calculo(A, B, Ans1, 36.5); }
void calculo(const vector&A、const vector&B、double&Ans1、const double jj);
void calculo(const vector&A,const vector&B,double&Ans1){calculo(A,B,Ans1,36.5);}

作为一个额外的评论,请通过常量引用传递
vector
s,因为传递值会导致潜在的昂贵复制成本。

“它不编译”-您不认为发布编译错误会有关系吗?我的错,我会在第二秒钟内这样做“它不编译”-你不认为发布编译错误会有关系吗?我的错,我马上就这么做不起作用,我得到:错误C2383:“f_funci”:此符号上不允许使用默认参数BoldId不起作用,我得到:错误C2383:“f_funci”:此符号上不允许使用默认参数。我需要更改.dll,是吗?抱歉,没有找到输入的位置。@PatrickMachado是的,您的.dll和相应的头需要更改为默认的原始
calculo
函数,或者重载
calculo
函数。因此,在定义.dll之后,没有明确的方法来定义它?因为如果函数必须重载,那么C++就可以定义默认参数。因为据我所知,如果我接受你答案的第二行,它只允许我使用jj的标准值,对吗?我理解你的说法是:“没有办法在不更改.dll头的情况下默认变量?”如果这是你的问题,那么答案是,“没错,如果要更改函数所需的参数数量,则必须更改标头。“如果您使用的是C接口,不仅不允许重载,而且也不允许默认设置:函数定义中的引用或
vector
s也不允许。因此,我首先要说明的是,您实际上并没有使用“C”接口:(所以我需要更改.dll,是吗?很抱歉,没有找到输入它的地方。@PatrickMachado是的,您的.dll和相应的头需要更改为默认的原始
calculo
函数,或者重载
calculo
函数。因此,在定义.dll之后,没有明确的方法来定义它因为如果函数必须被重载似乎是无用的,C++允许我们定义默认的参数。因为我理解如果我接受你的答案的第二行,它只允许我使用JJ的标准值,我是正确的吗?我理解你的声明来阅读:“没有办法在不更改.dll头的情况下默认一个变量?”如果这是您的问题,那么答案是,“这是正确的,如果您想更改函数所需的参数数量,则必须更改头。“如果您使用的是C接口,那么不仅不允许重载,而且也不允许默认设置:函数定义中的引用或
vector
s也不允许。因此,我首先声明您实际上没有使用“C”接口:(
error C2198: 'f_funci': too few arguments for call
void calculo(const vector<double>& A, const vector<int>& B, double &Ans1, const double jj);
void calculo(const vector<double>& A, const vector<int>& B, double &Ans1) { calculo(A, B, Ans1, 36.5); }