2012-06-30 9 views
5

मैं बहुत तरह संकलन समय पर functors की एक सरणी बनाने के लिए, कोशिश कर रहा हूँ: (पूरी फाइल):अप्राप्य ब्लॉक scoping त्रुटि, सी ++ functors की सरणी

#include <functional> 
using namespace std; 

function< float(float tElevation, float pAzimuth)> colorFunctions[] = { 
    [](float tElevation, float pAzimuth) -> float { 
    return 2.0f ; 
    }, 
} ; 

int main() 
{ 
} 

यह ठीक काम करता है। लेकिन जैसे ही आप, functor ब्लॉक के अंदर एक स्थानीय बनाने के लिए इस तरह की कोशिश के रूप में:

function< float(float tElevation, float pAzimuth)> colorFunctions[] = { 
    [](float tElevation, float pAzimuth) -> float { 
    float v = 2.0f ; 
    return v ; 
    }, 
} ; 

प्राप्त होने वाले त्रुटि 1 त्रुटि C1506: अप्राप्य ब्लॉक scoping त्रुटि

मैं इन ब्लॉक के अंदर स्थानीय लोगों घोषणा कर सकते हैं? यह काम नहीं लग रहा है।

+1

मैं क्योंकि उनमें अप्रयुक्त और जीसीसी जा रहा है के मापदंडों को मार डाला कोई चेतावनी या कुछ भी देता है। यहां तक ​​कि, एकमात्र त्रुटि अप्रयुक्त पैरामीटर के लिए है। – chris

+1

क्या यह लैम्ब्डा अभिव्यक्ति के अंत में अल्पविराम है? – coelhudo

+2

@coelhudo, यह एक प्रारंभकर्ता सूची है; [इसकी वैधता की] (http://stackoverflow.com/questions/7043372/int-a-1-2-weird-comma-allowed-any-particular-reason)। इससे बाद में आइटम जोड़ना आसान हो जाता है। – chris

उत्तर

-1

मैं निम्न पंक्ति के साथ Ubuntu 12.04 पर निम्न कोड संकलित:
जी ++ - 4.7 -std = C++ 0x main.cpp
और यह ठीक काम किया। क्या मंच और क्या संकलक आप उपयोग कर रहे हैं?

#include <iostream> 
#include <functional> 

using namespace std; 

function<float (float,float)> funcs[] = { 
    [] (float a, float b) -> float { 
     float c = 2.0f; 
     return c; 
    } 
}; 

int main() { 
    std::cout << funcs[0](1,2) << std::endl; 
} 
+1

यह एक टिप्पणी है –

0

मैं इसे एमएसवीसी 2010, एसपी 1 पर पुन: पेश कर सकता हूं। वीएस 10 लैम्बडा और स्कोपिंग के साथ कुछ समस्याओं के लिए जाना जाता है। मैंने बहुत कुछ करने की कोशिश की लेकिन कुछ भी सुंदर नहीं मिला। बदसूरत, बदसूरत वैकल्पिक हल है कि कुछ आरंभीकरण भूमि के ऊपर होगा लेकिन बाकी उद्देश्य के अनुसार कार्य:

#include <functional> 
#include <boost/assign/list_of.hpp> 
#include <vector> 
using namespace std; 

typedef function< float(float tElevation, float pAzimuth)> f3Func; 
vector<f3Func const> const colorFunctions = boost::assign::list_of(
    f3Func([](float /*tElevation*/, float /*pAzimuth*/) -> float { 
    float v = 2.0f ; 
    return v ; 
    })) 
    ([](float a, float b) -> float { 
    float someFloat = 3.14f; 
    return a*b*someFloat; 
    }) 
; 

#include <iostream> 

int main() 
{ 
    cout << colorFunctions[1](0.3f,0.4f) << '\n'; 
} 
संबंधित मुद्दे