【发布时间】:2018-12-11 07:09:54
【问题描述】:
我使用 msvc 2017 社区。当我测试以下代码时:
#include<functional>
using namespace std;
template<class T>
void UseArray(
T (&arr)[10]) {
arr[0] = 0;
}
template<class T>
void UseFunction(
function<bool(T, T)> para = [](T x, T y) { return x == y; }) {
para(1, 2);
}
template<class T>
void UseArrayAndFunction(
T (&arr)[10], // <-- All errors are here
function<bool(T, T)> para = [](T x, T y) { return x == y; } ) {
arr[0] = 0;
para(1, 2);
}
int main() {
int arr[10];
UseArray<int>(arr);
UseFunction<int>();
UseArrayAndFunction<int>(arr);
return 0;
}
前两个函数没问题,但最后一个有以下错误(都在第18行):
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2065: 'arr': undeclared identifier
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2275: 'std::function<bool(T,T)>': illegal use of this type as an expression
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(12): note: see declaration of 'std::function<bool(T,T)>'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2146: syntax error: missing ')' before identifier 'para'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2143: syntax error: missing ';' before '{'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2143: syntax error: missing ')' before ';'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2447: '{': missing function header (old-style formal list?)
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(19): error C2059: syntax error: ')'
你能告诉我是什么导致了这些错误吗?
【问题讨论】:
-
代码对我来说看起来不错。它适用于 g++ 7.3.0,使用
-std=c++11和-std=c++14。
标签: c++ visual-studio visual-c++ visual-studio-2017