2016-02-11 4 views
-1

Я имею в виду что-то вроде этого:Может ли функция лямбда вернуть тип указателя?

auto c = []() -> (int*) {int * b; b = new int(); b[0]=2; return b;}; 

К сожалению, если cuestion довольно глупо, но я не знаю, почему это вызывает ошибку компиляции:

main.cpp:3:18: error: expected type-specifier before '(' token 
auto c = []() -> (int*) {int * b; b = new int(); b[0]=2; return b;}; 
+1

Вы можете прочитать сообщение об ошибке. – user2079303

+1

Кроме того, 'b [0] = 2', когда у вас' new int() 'не определено, но близко к тому, чтобы быть таким (т. Е.' B [1] = 2' было бы неопределенным). – lcs

ответ

4

Это прекрасно работает (без () вокруг возвращаемый тип):

#include <iostream> 

int main() 
{ 
    auto c = []() -> int* { int *b = new int(); b[0] = 2; return b; }; 
    std::cout << *c() << std::endl; 
} 

(не беспокоить delete)

Live on Coliru

+0

Да, большое спасибо – GutiMac

5

Удалить круглые скобки вокруг int*. Вы не объявляете переменные вроде (int*) p, так почему скобки в возвращаемом типе?

компилируется правильно:

auto c = []()->int* {int * b; b = new int(); b[0]=2; return b;}; 
Смежные вопросы