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

时间:2011-02-13 11:57:13

标签: c++ visual-c++ lambda c++11 compiler-errors

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

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

VS10说:

  

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

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

感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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

我相信这确实是一个错误,如果你打开一个缺陷请在这里链接到它,以便我们跟进它(否则让我知道,我会打开一个缺陷)。

答案 1 :(得分:0)

你试过吗

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

也许在VS10中实现lambdas并不完整,因为你的例子在g ++ 4.5上工作正常 - http://www.ideone.com/5xQpz