这是我尝试解决的简化问题的一个示例。
passport.use(
'local-signup',
new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, username, password, done) {
User.findOne({email: username}, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
})
})
)
我使用以下命令编译我的代码:
#include <iostream>
#include <set>
using namespace std;
auto comp = [](int x, int y) { return x < y; };
struct Struct {
set<int, decltype(comp)> member(comp);
};
int main() {
Struct variable;
variable.member.insert(1);
variable.member.insert(5);
for(auto v: variable.member) {
cout << v << endl;
}
return 0;
}
不幸的是,它一直产生以下错误:
g++ -std=c++14 -o test.exe test.cpp
我曾尝试安装较新版本的g ++,但它不起作用。 我在MacOS上使用Clang执行此命令,以及在版本5.2中使用g ++执行Ubuntu 16。
答案 0 :(得分:2)
struct Struct {
set<int, decltype(comp)> member{ comp };
};
我的视觉工作室2017抱怨'comp'不是类型名称,它看不到'member'的定义,所以我猜编译器将'member'识别为函数定义。
使用member{ comp }
似乎解决了这个问题
答案 1 :(得分:1)
没有结构,这个例子可以编译为:
#include <iostream>
#include <set>
using namespace std;
auto& comp = [](int x, int y){ return x < y; };
auto member = set<int, decltype(comp)>(comp);
int main() {
member.insert(1);
member.insert(5);
for (auto v : member) {
cout << v << endl;
}
return 0;
}
<强>更新强>
对于结构案例,请尝试:
#include <iostream>
#include <set>
using namespace std;
auto& comp = [](int x, int y){ return x < y; };
struct Struct {
set<int, decltype(comp)> member = set<int, decltype(comp)>(comp);
} variable;
int main() {
variable.member.insert(1);
variable.member.insert(5);
for (auto v : variable.member) {
cout << v << endl;
}
return 0;
}
我的Visual Studio 2013无法编译auto member = set<int, decltype(comp)>(comp);
insude结构 - 错误为error C2853: 'member' : a non-static data member cannot have a type that contains 'auto'