将指针指向函数的函数和将默认值作为参数的向量会导致编译错误
Function with pointer to a function and vector with default value as arguments results in compilation error
为什么以下代码不能在MSVC 上编译
#include <vector>
void func(double (* fptr)(double), const std::vector<double> & v = {})
{
}
我收到以下错误。
source_file.cpp(6):错误C2065:"fptr":未声明的标识符
source_file.cpp(6):错误C2062:类型为"double"的意外
source_file.cpp(6):错误C2143:语法错误:缺少";"在"{"之前
source_file.cpp(6):错误C2143:语法错误:在";"之前缺少")">
source_file.cpp(6):错误C2447:"{":缺少函数头(旧式形式列表?)
source_file.cpp(6):错误C2059:语法错误:")">
source_file.cpp(7):错误C2447:"{":缺少函数头(旧式形式列表?)
用于x64 的Microsoft(R)C/C++优化编译器19.00.23506版
当我删除任一向量时-默认值:
void func(double (* fptr)(double), const std::vector<double> & v)
或函数指针:
void func(const std::vector<double> & v = {})
错误消失。是MSVC的漏洞还是我遗漏了什么?
Clang和G++的代码没有问题。
您可以使用签出代码https://rextester.com/l/cpp_online_compiler_visual
是MSVC错误还是我遗漏了什么?
你什么都没错过。这是微软风险投资公司的错误。你可以通过重载来解决它:
void func(double (* fptr)(double), const std::vector<double> & v)
{
}
void func(double (* fptr)(double)) {
std::vector<double> v;
func(fptr, v); // or just func(fptr, {})
}
尽管值得注意的是,取func
的地址现在是模糊的,这与您最初的完全符合标准的代码不同。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误