在尝试学习和使用lambda函数时,我在代码中看到了(奇怪的)编译错误。我花了一些时间调试它,但仍然不知道什么是错的。所以我有一个名为config.h
的头文件,就像
namespace config {
...
const int kNumPeriodsPerMove = [&] () {
const double time_nbr_disc = kSizeSlotHello * kNumSlotsHelloPerNbrDisc;
const double time_data_tx = kSizeSlotData * kNumSlotsDataPerDataTx;
const double time_epoch = time_nbr_disc + time_data_tx;
const int num_periods_per_move = ceil(kTimeBtwMoves / time_epoch);
return num_periods_per_move;
};
...
}
k*
形式的变量(如kSizeSlotHello
)是const
之前定义的config
变量,也是config.h:183:5: error: invalid user-defined conversion from ‘config::<lambda()>’ to ‘int’ [-fpermissive]
};
^
config.h:175:41: note: candidate is: config::<lambda()>::operator int (*)()() const <near match>
const int kNumPeriodsPerMove = [&] () {
^
config.h:175:41: note: no known conversion from ‘int (*)()’ to ‘int’
内的变量。当我编译时,我有错误消息:
const int kNumSlots = [&] (double (*f)(double)) {...} (f);
我还在其他地方使用了lambda函数,例如Python 2.7.3
,它没有任何编译错误。我对这个问题很好奇。感谢。
答案 0 :(得分:3)
通过这样做:
const int kNumPeriodsPerMove = [&] () {
// your code here
return num_periods_per_move;
};
你实际上并没有执行它
相反,您正在创建一个无法转换为lambda function
的{{1}}实例
所以,错误是有意义的。
相反,你应该:
int
甚至(更简洁):
auto fn = [&] () {
// your code here
return num_periods_per_move;
};
int kNumPeriodsPerMove = fn();
也就是说,人们可以争辩说,以这种方式使用lambda没有多大意义,你应该修改那部分代码。