Форум программистов, компьютерный форум CyberForum.ru

Lambda crash - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление периметра треугольника, заданного координатами своих вершин http://www.cyberforum.ru/cpp-beginners/thread1834113.html
Прошу помогите если можете. Треугольник заданный координатами x1, y1, x2, y2, x3, y3 своих вершин. склвсты программу для вычисления периметра треугольника. Значение x1, y1, x2, y2, x3, y3 читаются с предварительно подготовленного файла. Результат выводится на экран и дописывается в файл с исходными данными
C++ Куда return возвращает результат из функции? Добрый день . возник вопрос куда возвращает return из функции , то что он должен возвратить? Я думал он возвращает результат туда где он вызывается #include <iostream> #include <ctime> #include <cstdlib> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1834083.html
C++ Сформировать и вывести на экран массив индексов минимальных элементов
Сформировать и вывести на экран массив индексов минимальных элементов: 1. столбцов матрицы 2. строк матрицы
Написать программу, моделирующую поиск в ширину при прямом выводе C++
Написать программу, моделирующую поиск в ширину при прямом выводе. Буду очень благодарен. )
C++ Записать в файл несколько строк, а затем записать несколько строк из этого файла в другой http://www.cyberforum.ru/cpp-beginners/thread1834058.html
Заранее создать текстовый файл 1.txt и записать в него несколько строк текста. Программа должна получить из него второй файл 2.txt, в который записать n-последующих строк исходного файла. n ввести с клавиатуры..
C++ Найти количество положительных элементов массива; найти сумму элементов, расположенных после заданного В одномерном массиве, состоящем из n целых элементов, вычислить: 1) Количество положительных элементов массива; 2) Сумму элементов массива, расположенных после последнего элемента,равного нулю; 3) Преобразовать массив таким образом, что бы сначала располагались все элементы, целая часть которых не превышает 1, а потом - все остальные. подробнее

Показать сообщение отдельно
maxm
60 / 32 / 8
Регистрация: 17.07.2014
Сообщений: 437

Lambda crash - C++

25.10.2016, 12:50. Просмотров 227. Ответов 10
Метки (Все метки)

Есть класс в продакшне. В одном из методов (они все static) обьявляю лямбду, в ней вызываю перегруженный метод из того же класса. Но она его не видит. Я сделал поинтер в методе и передал в capture лист - и она сьела! Но второй метод, который не имеет перегрузок, не выдал ошибки, все заработало. Только вот креш при его вызове. Почему так может быть?

Вот рабочий example код, как все выглядело. Есть идеи, почему такое может не работать? Даже если явно указать имя пространства класса, из которого я вызываю метод в лямбде. Сорс код продакшна не могу привести, слишком много. Да и ошибки явной нету, заметили бы.


C++
1
2
3
4
5
6
7
//MyClass.hpp
class MyClass
{
    void foo(int a, int b);
    void foo(const char* ch);
    void bar(int a);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//MyClass.cpp
#include "myclass.hpp"
 
void MyClass::foo(int a, int b)
{
 
}
 
void MyClass::foo(const char* ch)
{
 
}
 
void MyClass::bar(int a)
{
 
}
 
void MyClass::test()
{
        // не компилит, если не передать поинтер на метод
    auto lambda = []()
    {
        bar(0); // результат тот же
        foo(1,2); // что так 
        MyClass::foo("Wow"); // что так
    };
 
        void(*pointer)(int a, int b); // так ОК
    auto lambda2 = [pointer]()
    {
        pointer(1, 2);
    };
 
    lambda();
}
C++
1
2
3
4
5
6
7
8
9
// main.cpp
#include "myclass.hpp"
#include <Windows.h>
 
int main()
{
    MyClass::test();
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru