提升1.55,参数13信号错误数

时间:2014-02-09 16:57:28

标签: c++ boost

在Visual Studio中使用boost 1.55时,以下代码会导致错误(在代码之后)

void foo(float a) {
    a *= 2;
}

int main() {
    boost::signals2::signal<void(float)> sig;
    boost::function<void(float)> f = boost::bind(foo, _1);
    sig.connect(f);
}

错误:1>...\dep\include\boost\bind\bind.hpp(192): error C2064: term does not evaluate to a function taking 0 arguments

我不知道,但我很高兴它不是一个带有0个参数的术语,因为它几乎与信号的想法相矛盾。怎么回事?

2 个答案:

答案 0 :(得分:0)

我可以使用boost 1.53和VS2012编译并运行以下代码。

#include <iostream>
#include <boost/signals2.hpp>

void foo(float& a) {
    a *= 2;
    std::cout << a << std::endl;
}

int main()
{
    boost::signals2::signal<void(float)> sig;
    boost::function<void(float)> f = boost::bind(foo, _1);
    sig.connect(f);
    float i = 5;
    std::cout << i << std::endl;
    sig( i );
    std::cout << i << std::endl;
    std::cin >> i;

    return 0;
}

结果5,10,5。我无法解释为什么它不是5,10,10 ......

答案 1 :(得分:0)

boost 1.55和visual studio 13的解决方案:

void foo(float a) {
    a *= 2;
}

int main() {
    boost::signals2::signal<void(float)> sig;
    sig.connect(boost::signals2::signal<void (float)>::slot_type(foo, _1));
}