带有std::函数的lambda/函数指针导致错误



更新:

这些错误似乎来自Eclipse的代码分析器CODAN,出现在Problems视图中,错误所指的行上也用红色下划线。奇怪的是,构建项目成功地创建了可执行文件,而构建不会在控制台中报告这些错误。我可以运行该可执行文件并获得预期的输出。

因此,现在的问题变成了:如何让Eclipse的CODAN识别出这些使用lambda和函数指针的std::function不是错误?

原始问题:

在下面的C++代码中,它直接使用g++进行良好编译,但在Eclipse CDT中会导致错误。如何让我的Eclipse项目识别并允许在std::function中使用lambdas(或函数指针(?

注意:请参阅问题底部的编辑以更新

#include <functional>
#include <iostream>
void foo(int i) {
std::cout << i << std::endl;
}
void function_ptr(void (*bar)(int)) {
bar(1);
}
void function_std(std::function<void(int)> baz) {
baz(2);
}
int main() {
// these function calls are ok
function_ptr(&foo);
function_ptr([](int i) -> void {
foo(i);
});
// these function calls cause errors
function_std(&foo);
function_std([](int i) -> void {
foo(i);
});
// these assignments cause errors
std::function<void(int)> f1 = foo;
std::function<void(int)> f2 = [](int i) -> void {
foo(i);
};
f1(3);
f2(3);
return 0;
}

在命令行上编译此代码可以按预期工作,并产生以下输出:

$ g++ src/LambdaFunctionParameterExample.cpp -o example
$ ./example
1
1
2
2
3
3

然而,在Eclipse中,接受std::function作为参数的函数调用会产生以下错误:

Invalid arguments '
Candidates are:
void function_std(std::function<void (int)>)
'

std::function变量分配会产生以下错误:

Invalid arguments '
Candidates are:
function()
function(std::nullptr_t)
function(const std::function<void (int)> &)
function(std::function<void (int)> &&)
function(#10000)
'

我在Project中将语言标准设置为ISO C++17 (-std=c++17)->属性->C/C++内部版本->GCC C++编译器->地方话(根据本文档,我认为设置此属性是访问<functional>标头所必需的。奇怪的是,指定(或不指定(语言级别不会影响上述错误。而且,当直接使用g++构建时,不需要指定语言级别。(

我使用的是macOS Catalina 10.15.5,来自自制程序的gcc 10.2.0,以及Eclipse CDT版本2020-09(4.17.0(。

此行为是Eclipse CDT 10.0版本中的一个已知错误。

更新:

此问题已通过升级到Eclipse CDT 10.1版本修复:
https://download.eclipse.org/tools/cdt/builds/10.1/cdt-10.1.0-rc2/

修复步骤:

  1. Help->中输入上述URL;Install New Software...->Work with:并安装所有选项
  2. 重新启动Eclipse
  3. 选择Project->C/C++ Index->Rebuild

相关内容

  • 没有找到相关文章

最新更新