Forum: Diğer Konular RSS
C++ Üye Fonksiyon İçinde Bulunan Lambdadan Sınıf Verisine Ulaşmak
İbrahim #1
Üye Eki 2015 tarihinden beri · 142 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C++ Üye Fonksiyon İçinde Bulunan Lambdadan Sınıf Verisine Ulaşmak
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.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
D'de otomatik, C++'ta açıkça capture etmek gerekiyor:
    [this]()
Ali
İbrahim #3
Üye Eki 2015 tarihinden beri · 142 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ş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 
İbrahim #4
Üye Eki 2015 tarihinden beri · 142 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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?
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-08-16, 20:47:36 (UTC -07:00)