Thread overview
C++ Üye Fonksiyon İçinde Bulunan Lambdadan Sınıf Verisine Ulaşmak
Jul 13, 2016
İbrahim
Jul 13, 2016
İbrahim
Jul 13, 2016
İbrahim
July 13, 2016

Selamün Aleyküm;

Kod şöyle:

#include <iostream>

using namespace std;

class Example
{
private:
 std::string str;
public:
 Example();
 void foo()
 {
   []()
   {
     str = "Hello World!\n";
   };
 }
 void print() const
 {
   cout << str << endl;
 }
};

int main()
{
 Example e;
 e.foo();
 e.print();

 return 0;
}

Ve şu hatayı alıyorum:

/home/UserName/My Projects/cppproject1/main.cpp:15: error: 'this' was not captured for this lambda function
      str = "Hello World!\n";
      ^

Bu şekilde sınıf verisi olan str'ye nasıl ulaşabilirim? (Yani şöyle: { str = "Hello"; }).
Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2016

Şu hataları verdi:

/home/UserName/My Projects/cppproject1/main.cpp:26: error: undefined reference to `Example::Example()'
:-1: error: collect2: error: ld returned 1 exit status

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2016

Dalgınlığıma gelmiş: Example() {} yaptım çalıştı ama str boş yazıyor. Yani lambda str'yi neden değiştirmemiş? Nasıl değiştirebilirim?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2016

D'de otomatik, C++'ta açıkça capture etmek gerekiyor:

   [this]()

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2016

O sonuncu hatayı ben de farketmiştim. Lambdayı hiç işletmiyorsun. Nasıl işletmek istediğini bilmiyorum ama ben foo()'dan döndürüp main() içinde çağırmıştım. (Sanırım C++14 derleyicisi gerektiriyor. g++'a -std=c++14 seçeneğini vermem gerekti):

 // Lambda döndürüyor
 auto foo()
 {
   return [this]()
   {
     str = "Hello World!\n";
   };
}

// ...

// Çağrılan lambda'yı işletiyor:
 auto f = e.foo();
 f();

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]