其他分享
首页 > 其他分享> > c – lambda体内重载的静态成员函数调用无法编译

c – lambda体内重载的静态成员函数调用无法编译

作者:互联网

所以基本上这里是我的代码的简化版本,不能编译:

class MyClass
{
    static void foo(X)
    {
        //do something
    }

    static void foo(Y)
    {
        //do something
    }

    static void bar()
    {
        std::for_each(collection->begin(), collection->end(),
          [&](X& elem)
        {
          foo(elem); //this call generates the error
        });
    }   
};

编译器:安装了MSVC 2010 SP1
它生成的错误消息是:错误C3861:’foo’:找不到标识符

如果我重命名foo()函数,或者我在lambda之外调用它,则不会发生错误.

更新:

我设法通过明确限定foo()来解决这个问题.有趣的是:: MyClass :: foo(elem)可以工作,但MyClass :: foo(elem)不能.

解决方法:

尝试明确限定foo:

MyClass::foo(elem);

(这可能是MSVC10错误所需的解决方法,GCC无需资格即可接受您的代码)

标签:c,c11,lambda,visual-studio-2010,static-methods
来源: https://codeday.me/bug/20190831/1775920.html