在vs2015中使用std :: functional的误报错误

时间:2017-03-08 22:30:47

标签: c++ c++11 visual-studio-2015 stdbind

我昨天已经实现了一些测试功能,所有编译和工作都没有错误。今天我回到了我的电脑,我的std::bind标有红色,但编译没有错误。看起来像Intellisense,编译器不同意std::bind类型。我该如何解决这个问题?

#include <functional>

class MyClass {
public:
    int doE() {
        return 0;
    }

    int doF() {
        return 1;
    }
};


void main()
{
    MyClass obj;
    std::function<int()> f = std::bind(&MyClass::doE, obj); // underlined red
    std::cout << f();
}

错误消息如下:

Error (active)
    no suitable user-defined conversion from "std::_Binder<std::_Unforced, int (MyClass::*)(), MyClass &>" to "std::function<int ()>" exists
    functionals
    c:\functionals\functionals\thirdFunctionOnObject.h

我在更复杂的代码中使用相同的错误类型(Intellisense说有错误,但编译得很好),我使用了std::mem_fn().

1 个答案:

答案 0 :(得分:2)

与VS 2015 C ++有同样的问题,我讨厌它。微软让我发疯。

现在我通过将代码移动到静态函数来使用令人讨厌的工作。在您的情况下,它将类似于以下内容:

class MyClass {
    // other code

    int doE () {
        return 0;
    }

    static int statDoE(MyClass * myClass) {
        return myClass->doE();
    }

}