मैं C ++ 11 में नया हूं। मैं निम्नलिखित पुनरावर्ती लंबा फ़ंक्शन लिख रहा हूं, लेकिन यह संकलन नहीं करता है।
sum.cpp
#include <iostream>
#include <functional>
auto term = [](int a)->int {
return a*a;
};
auto next = [](int a)->int {
return ++a;
};
auto sum = [term,next,&sum](int a, int b)mutable ->int {
if(a>b)
return 0;
else
return term(a) + sum(next(a),b);
};
int main(){
std::cout<<sum(1,10)<<std::endl;
return 0;
}
संकलन त्रुटि:
विमल @ linux-718q: ~ / अध्ययन / 09C ++ / c ++ 0x / lambda> g ++ -std = c ++ 0x sum.cpp
sum.cpp: लंबो फ़ंक्शन में: sum.cpp: 18: 36: error: ' ((<lambda(int, int)>*)this)-><lambda(int, int)>::sum
' को फ़ंक्शन के रूप में उपयोग नहीं किया जा सकता है
जीसीसी संस्करण
gcc संस्करण 4.5.0 20091231 (प्रायोगिक) (GCC)
लेकिन अगर मैं sum()
नीचे की घोषणा को बदल देता हूं , तो यह काम करता है:
std::function<int(int,int)> sum = [term,next,&sum](int a, int b)->int {
if(a>b)
return 0;
else
return term(a) + sum(next(a),b);
};
क्या कोई इस पर प्रकाश डाल सकता है?
mutable
कीवर्ड वहाँ क्या कर रही?
std::function<int(int,int)> sum = [&](int a, int b) {