在Visual Studio 2010中使用boost :: function 1.44时出错

Cha*_*han 1 c++ boost

我用boost :: function尝试了一个简单的例子.但是我得到了编译错误说:

#include <boost/array.hpp>
#include <boost/function.hpp>
#include <iostream>

float div( float x, float y ) {
 return x / y;
}

int main() {
 boost::function<float (float x, float y)> f;
 f = &div;
 std::cout << f( 3.0f, 3.5f ) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

错误:

Error 2 error C2568: '=' : unable to resolve function overload c:\visual studio 2010 projects\net report\net report\main.cpp 12 1 NET Report
Error 1 error C2563: mismatch in formal parameter list c:\visual studio 2010 projects\net report\net report\main.cpp 12 1 NET Report
Run Code Online (Sandbox Code Playgroud)

任何的想法?

谢谢,

ice*_*ime 5

错误后面的内容实际上非常有趣:

1> e:[...]\main.cpp(11):错误C2568:'=':无法解决函数重载
1> e:[...]\main.cpp(5):可能'浮动DIV(浮点,浮点)"
1> d:\微软的Visual Studio 10.0\VC \包括\ stdlib.h中(479):或'lldiv_t DIV(_ 的Int64, _int64)'
1> d:\微软的Visual Studio 10.0\VC \包括\ stdlib.h中(475):或'ldiv_t DIV(长,长)'
1> d:\微软的Visual Studio 10.0\VC \包括\ stdlib.h中(432):或"div_t DIV(INT,INT) "

div在scope(来自stdlib.h)中有多个命名的函数,编译器在编写时不知道你指的是哪一个&div:

  • 使用演员表: f = static_cast<float (*)(float, float)>(&div);
  • 将您的div函数放在单独的命名空间中:f = &my_namespace::div