Che cosa è una funzione membro non static?

Mi è stato detto che non posso usare il “questa” parola chiave, in una funzione di classe. Vengo da c# e sono abituato a questo lavoro, ma il compilatore mi dice che può essere utilizzato solo all’interno non statici funzioni membro.

D3DXVECTOR3 position;

void Position(D3DXVECTOR3 position)
{
    this.position = position;
}
siete sicuri che sia lavorato in c#? in c#, classe a ‘funzione’ che viene chiamato “metodo statico’, e non è possibile utilizzare questo in chi sia?
sì, ho fatto tutto il tempo per fare riferimento a una delle classi di variabile nel costruttore, o il costruttore di diverso?
Forse si dovrebbe mostrare la classe di questo metodo appartiene – che potrebbe aiutare a chiarire cosa si sta facendo

OriginaleL’autore SirYakalot | 2011-09-29

3 Replies
  1. 13

    questo è un puntatore contenente l’indirizzo dell’oggetto.

    D3DXVECTOR3 position;
    
    void YourClassNameHere::Position(D3DXVECTOR3 position)
    {
        this->position = position;
    }

    Dovrebbe funzionare.

    D3DXVECTOR3 position;
    
    void YourClassNameHere::Position(D3DXVECTOR3 position)
    {
        (*this).position = position;
    }

    Dovrebbe funzionare anche.

    Eh, non ho notato. Ho modificato per includere MarkB delle modifiche.
    Tranne che non sappiamo, perché non ha dato nessun contesto.

    OriginaleL’autore Pubby

  2. 15

    In C++, è necessario qualificare il proprio Position funzione con il nome della classe:

    void YourClassNameHere::Position(D3DXVECTOR3 position)

    Anche da @Pubby8 risposta this è un puntatore, non un riferimento, quindi è necessario utilizzare this->position invece (o considerare l’utilizzo di nomi di parametro che non ombra i membri della classe a – mi piace usare il trailing _ sul mio i membri della classe a).

    Inoltre, C++, che non passa di riferimento per default, quindi se D3DXVECTOR3 è un complicato tipo sarete copia di un sacco di dati in giro. In considerazione di passarlo come const D3DXVECTOR3& position invece.

    OriginaleL’autore Mark B

  3. 4

    Non solo è Position una funzione (non è associato con una classe) il modo in cui hai scritto, ma this è anche un puntatore, non un riferimento.

    D3DXVECTOR3 position;
    
    void ClassName::Position(D3DXVECTOR3 position)
    {
        this->position = position;
    }

    o, se questo dovrebbe essere un costruttore,

    ClassName::ClassName(D3DXVECTOR3 p) : position(p)
    {
    }

    OriginaleL’autore Useless

Lascia un commento