2016-04-14 13 views
-2

, "Bu" nesne nasıl yapabilirim:nasıl atama Ben bir işaretçi örneği sınıfını atamak çalışıyorum statik sınıf pointer

#include <fstream> 

using namespace std; 

class A 
{ 
    private: 
     static A *pointer; 

    protected: 

     A(){} 

     A GetInstance() 
     { 
      //On this point throw the error: could not convert A::pointer’ from A*’ to ‘A’ 
      pointer& = (A)this;   
      return pointer; 
     }  
}; 

A *A::pointer = NULL; 

Bunu nasıl yapabilirim?

static A *pointer; 
... 
... 
pointer& = (A)this;  

Mümkün mü? Bu sınıftan devraldığı benzersiz bir bağlantı (yalnızca bir kez) ve sanal havuzları (Add, Save, GetById, GetAll()) sınıf sınıf deposu ile basit bir depo sınıfı oluşturmaya çalışıyorum. Her zaman açık ve kapalı olmadan sadece bağlantı kullanarak Havuz sınıfları çok. Birisi bir örnek varsa, ben memnun olurum.

Gelişmiş teşekkürler.

+0

Hayır, 'işaretçi = = (A); bu, geçersiz dilbilgidir. "Örnek sınıfını bir işaretçiye atayın" nedir? Demek istiyorsun * * pointer = * this; '? – MikeCAT

+3

Tüm ekstra noktalama işaretleri ve döküm ile neler var? 'pointer = this;' - belki de kanıtlanmış tekil uygulamaların ilkini incelemeniz gerekebilir. – BeyelerStudios

+1

@BeyelerStudios En iyi, endüstriyel dayanıklılıklı tekton uygulaması "yapmayın". Bu kodda korkunç bir kod kokusu var. –

cevap

3

(A)thisclass A üzere bir tip A * bir dönüşüm (sınıf A bir nesneye bir işaretçi) (sınıf A bir amacı) olduğu için çalıştıkları çalışmaz. Derleyici böyle bir dönüşüm yapamaz.


A::pointer tipi A * olup. Yani class A yöntemlerinin içinde this. Eğer daha okunabilir yapmak istiyorsanız yazabilirsiniz,

pointer = this; 

Veya:

A::pointer = this; 

Bu şekilde bir okuyucu için açık pointer statik özellik olduğunu

Tüm ihtiyacınız

olduğunu (sınıf üyesi) ve bir örnek özelliği değil.


Sonraki satırda bir hata var. A::getInstance() (return pointer;) tarafından döndürülen değer, yöntemin başlığında bildirilen türle eşleşmiyor (sınıfın nesnesi A). Yanlış olan, yöntemin beyanıdır. A türünde bir nesneyi döndürmek pek mantıklı değildir, bu tür bir nesneye bir işaretçi döndürmelidir (daha spesifik olarak, sınıfın tek örneği olan, A::pointer.

Yönteminin tanımını şu şekilde değiştirin: . Singleton hakkında iyi tavsiye bunu çünkü kaçınmaktır zaten yorumlarda fark diğer okuyucular gibi

A *GetInstance() 
{ 
    pointer = this; 
    return pointer; 
} 

, Singleton pattern uygulamak için çalışıyoruz görünüyor (ama içinden sadece yarım yoludur) test edilebilir değil, sadece küresel bir değişken ve küresel değişkenler genel olarak, Verilerinizi saklamanın kötü bir yolu.

+0

Teşekkürler, bunu daha okunaklı kullanacağım. – Vitorlui

İlgili konular