2010-02-25 22 views
5

böyle yaklaşık görünen bir sınıf var:C++ 'bu' parametre olarak

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(x, y) 
    { 
     return Anchor(this, x, y); 
    } 
private: 
    points[x*y]; 
} 

Ben Mesh erişmek ve değiştirebileceğiniz bir "Çapa" noktasını temsil başka bir sınıf yapmak istiyorum böyle gelin: Ben return Anchor(this, x, y) gibi MeshClass::getAnchorPoint yöntem şey Anchor yapmaya çalıştığınızda

class Anchor 
{ 
public: 
    Anchor(&MeshClass, x, y) 
    moveAnchor(x, y); 
} 

sorundur ama this const olduğu için yapamıyorum. Bir çözüm olarak, bunu anlayana kadar Anchor'a bir referans noktasını kabul ediyorum ve moveNnchor bu noktayı doğrudan hareket ettiriyor.

Düzenleme: Sorun büyük olasılıkla bir Referans kullanmaya çalışırken yaptığım bir dilsizlikti. Normalde yaptığım gibi bir işaretçi kullanarak değiştirdim ve derleyiciden hiçbir şikayette bulunmadan this'dan geçebilirim. Neredeyse, bu varlık ile ilgili bir hata aldığımdan eminim, ama bunu yeniden oluşturamıyorum, bu yüzden sadece aklımdan çıkmalıyım.

+0

Merhaba, benim için senin öyle ... derlemek varsayalım değildir? –

+1

Muhtemelen yok (henüz) :) Unutmayın ki (en azından düz eski C), tür belirtilmemişse, varsayılan olarak int'ye girer, ancak bir uyarı atar. –

+2

Lütfen kullanmak istediğiniz gerçek kodu ve oluşturduğu hatayı gönderin. (Bu hatayla uğraşmayı denemediğinizden değil.) Yapmaya çalıştığınız şeyi tahmin etmek biraz zor. –

cevap

8

C++ 'da, bu bir işaretçi değil, bir referanstır. Böyle bir şey yapabileceğini:

class Anchor; //forward declaration 

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(int x, int y) 
    { 
     return Anchor(*this, x, y); 
    } 
private: 
    int points[WIDTH*HEIGHT]; 
} 

class Anchor 
{ 
public: 
    Anchor(MeshClass &mc, int x, int y); 
} 
+0

Bu muhtemelen benim sorunumdu. Anchor'un bir referans değil, bir işaretçi kabul etmesine karar verdim, bu durumda 'bu' artık bir parametre olarak iyi çalışıyor gibi görünüyor. – Winder

1

Neden this const nedir? this bir işaretçi değil, bir referanstır. return Anchor(*this, x, y); mu olmalı?

+0

Teknik olarak, aslında bu _is_ const, * bu değil. – Joel

+0

Teknik olarak, bu 'const 'nitelikli değil. Bu değiştirilemez çünkü bir özellik değil, çünkü bir const var. Bu, '' '' '' '' '' '' '' '' '' * '' * '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'dır. –

0

Eğer parametre olarak bir const MeshClass& kabul etmek Anchor değiştirebilir veya Anchor oluştururken (MeshClass) olarak bu döküm olabilir mi? this sertliğini kaldırmak için const_cast<MeshClass>(this) kullanıp kullanamayacağından emin değilim.

2

bu ait constness bir sorun değildir. İşaretçinin kendisi const, işaret ettiği değer değil.

Gerçek sorun buradadır:

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(x, y) 
    { 
     return Anchor(*this, x, y); 
    } 
private: 
    points[x*y]; 
} 
İlgili konular