But how can I change the expression to be legal and usable? bind(&std::pow,constant(-1),bind(&IIPrimemap::size,var(primemapvec))); I tried : bind(&std::pow,constant(-1.0),bind<int>(&IIPrimemap::size,var(primemapvec))); and bind(&std::pow,constant(-1.0),ret<int>(bind(&IIPrimemap::size,var(primemapvec)))); even bind(&std::pow,constant(-1.0),ll_dynamic_cast<int>(bind(&IIPrimemap::size,var(primemapvec)))); But the complier told me that: cannot resolve overloaded function `pow' based on conversion to type `unsigned int' I do not know how to solve now. Can anyone with kindness help me? 在2009-07-01,"Steven Watanabe" <watanabesj@gmail.com> 写道:
AMDG
fmingu wrote:
I use Dev-C++,and the snipet of the program is: #pragma hdrstop # include <iostream> # include <vector> # include <iterator> # include "boost/math/common_factor.hpp" # include "boost/lambda/lambda.hpp" # include "boost/lambda/bind.hpp" # include "boost/lambda/if.hpp" # include "boost/lambda/casts.hpp" # include "boost/lambda/construct.hpp" # include "boost/lambda/loops.hpp" # include "boost/lambda/switch.hpp" # include "boost/tuple/tuple.hpp" # include "boost/tuple/tuple_comparison.hpp" # include <string> # include <map>
using namespace std; using namespace boost::lambda; using namespace boost;
void a(){ std::cout<<std::pow(4,3); return; } ............... but the complier told me that:
main2test.cpp: In function `void a()': main2test.cpp:69: call of overloaded `pow(int, int)' is ambiguous F:/CB2009/Dev-Cpp/include/math.h:162: candidates are: double pow(double, double) F:/CB2009/Dev-Cpp/include/c++/cmath:401: float std::pow(float, float) F:/CB2009/Dev-Cpp/include/c++/cmath:410: long double std::pow(long double, long double) F:/CB2009/Dev-Cpp/include/c++/cmath:419: double std::pow(double, int) F:/CB2009/Dev-Cpp/include/c++/cmath:423: float std::pow(float, int) F:/CB2009/Dev-Cpp/include/c++/cmath:427: long double std::pow(long double, int)
And in my computer, the C++ libraries includes are F:\CB2009\Dev-Cpp\include\c++ F:\CB2009\Dev-Cpp\include\c++\mingw32 F:\CB2009\Dev-Cpp\include\c++\backward F:\CB2009\Dev-Cpp\include F:\CB2009\boost_1_34_1\boost_1_34_1 I do not know how to solve it.
There is no overload of std::pow that takes two ints. You need to match one of the possible signatures exactly.
I do not use <math> or <cmath> yet. Why the complier told me such files? And whether the two files are included in other files or not?
Apparently cmath is included indirectly by some other header file. This is hardly an unusual occurrence in C++...
And can I use: bind(&std::pow,constant(-1),bind(&IIPrimemap::size,var(primemapvec)));
You can't pass the address of an overloaded function to a function template like bind without casting it to the correct function pointer type.
in the program? where : typedef std::pair<int, int> IIPrimepair; std::vector<IIPrimepair> primepairvec;
Can anyone with kindness help me?
In Christ, Steven Watanabe