gpt4 book ai didi

c++ - g++ lambda declared using local type ... 已使用但从未定义 - 真的是错误吗?

转载 作者:行者123 更新时间:2023-11-30 02:20:11 27 4
gpt4 key购买 nike

如果没有 -fpermssive,g++ 将无法编译这段代码。 clang 和 icc 都没有提示。这段代码合法吗?

我的意图是在一个编译单元中声明wrapped_foo,并在一个单独的编译单元中定义它。这可能吗?

bug1.cpp

auto wrap(int (*f)(int)){
return [f](int i) {
return f(i);
};
}

int foo(int);
extern decltype(wrap(foo)) wrapped_foo;

int func(){
return wrapped_foo(2);
}
garden with -m gcc/7.3.0-01c7/bin g++ -Wall -Wextra  bug1.cpp -cbug1.cpp:8:28: error: ‘wrap(int (*)(int))::<lambda(int)> wrapped_foo’, declared using local type ‘wrap(int (*)(int))::<lambda(int)>’, is used but never defined [-fpermissive] extern decltype(wrap(foo)) wrapped_foo;                            ^~~~~~~~~~~

最佳答案

是的,这是可能的:

头文件

inline auto wrap(int (*f)(int))
{
return [f](int i) {
return f(i);
};
}

int foo(int i);
extern decltype(wrap(&foo)) wrapped_foo;

cpp文件

int foo(int i) { return i;}
decltype(wrap(foo)) wrapped_foo = wrap(&foo);

用法

int func(){
return wrapped_foo(42);
}

int main() {
std::cout << func() << std::endl;
}

Demo

关于c++ - g++ lambda declared using local type ... 已使用但从未定义 - 真的是错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com