मैं के साथ सी ++ 11 के आसपास खेल रहा हूँ अभी और कॉलबैक SQLite के रूप में एक लैम्ब्डा उपयोग करने के साथ निम्न समस्या पाया। लैम्ब्डा के अंदर एक वेक्टर चर को कैप्चर करते समय, मुझे यह कहते हुए एक त्रुटि मिलती है कि हस्ताक्षर मेल नहीं खाते हैं। (बजाय [&ret]
[]
, और अंदर ret
का उपयोग नहीं) लैम्ब्डा में कि चर का उपयोग कर के बिना, यह ठीक काम करता है।कैम्बेबल चर के साथ/बिना लैम्ब्डा के बीच हस्ताक्षर अंतर?
vector<SomeClass> ret;
char *err = nullptr;
int res = sqlite3_exec(db,
"some sql query, doesn't matter",
[&ret](void *unused, int argc, char **argv, char **columnName) -> int
{
ret.push_back(SomeClass());
return 0;
},
nullptr,
&err);
यह वह जगह है त्रुटि मैं:
cannot convert 'TestClass::testMethod()::<lambda(void*, int, char**, char**)>' to 'int (*)(void*, int, char**, char**)' for argument '3' to 'int sqlite3_exec(sqlite3*, const char*, int (*)(void*, int, char**, char**), void*, char**)'
जीसीसी संस्करण है "जीसीसी (XvidVideo.RU - जीसीसी 4.6.1 i686-पीसी-mingw32) 4.6.1 20,110,625 (प्री-रिलीज़)" पर विंडोज।
क्यों यह एक फर्क पड़ता है?
मैं दृश्य स्टूडियो 2010 संकलक के साथ एक ही बात कोशिश कर रहा हूँ और यह पसंद नहीं करता है या तो लैम्ब्डा के रूप ... किसी को भी अगर यह VS2010 impl में एक ज्ञात बग है पता है? –