C2326 函数无法访问“bar”在本地类中定义 lambda 时

发布于 2024-10-17 07:44:16 字数 383 浏览 1 评论 0原文

我遇到了一些涉及本地类和 lambda 的奇怪编译器错误。我将其范围缩小到以下示例:

int main()
{
    class test {
        void foo(int bar) {
            auto lambda = [=] (int) { return bar; };
        }
    };
    return 0;
}

VS10 说:

错误 C2326:“void main::test::foo(int)”:函数无法访问“bar”

在本地类中使用 lambda 是否有任何限制,或者这是编译器中的错误?

谢谢四位的帮助。

I have hit some strange compiler error involving local classes and lambdas. I have narrowed it down to the following example:

int main()
{
    class test {
        void foo(int bar) {
            auto lambda = [=] (int) { return bar; };
        }
    };
    return 0;
}

And VS10 says:

error C2326: 'void main::test::foo(int)' : function cannot access 'bar'

Are there any limitations on using lambdas in local classes or is this a bug in the compiler?

Thanks four your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

救星 2024-10-24 07:44:16

我可以确认,只有当该类在函数中定义并且 lambda 接受参数时,这种情况才会在 VS10 中发生。
g++中不会出现这样的问题。

我相信这确实是一个错误,如果您打开一个缺陷,请在此处链接到它,以便我们可以跟进它(否则请告诉我,我将打开一个缺陷)。

I can confirm that this happens in VS10 only when the class is defined in a function and the lambda accepts a parameter.
No such problems appear in g++.

I believe this is indeed a bug, if you open a defect please link to it here so we can follow up on it (otherwise let me know and I'll open a defect).

不交电费瞎发啥光 2024-10-24 07:44:16

你是否尝试过

int main()
{
    class test {
        void foo(int bar) {
            auto lambda = [bar] (int) { return bar; };
        }
    };
    return 0;
}

也许VS10中的lambda实现并不完整,因为你的示例在g++4.5上运行良好 - http: //www.ideone.com/5xQpz

And have you tried

int main()
{
    class test {
        void foo(int bar) {
            auto lambda = [bar] (int) { return bar; };
        }
    };
    return 0;
}

Maybe implementation of lambdas in VS10 is not complete, because your example works fine on g++4.5 - http://www.ideone.com/5xQpz

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文