0 votes

Comment déclarer de manière constante le pointeur envoyé comme paramètre ?

Je veux déclarer en permanence le pointeur reçu en tant qu'argument.

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

C'est ainsi qu'on l'appelle :

void OtherClass::func()
{
  Class::func(this);
}

Cela ne compile pas et si je ne déclare pas le pointeur OtherClass, je peux le modifier.

Merci.

2voto

Vous ne pouvez pas définir des fonctions statiques de classe memberv comme ceci :

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

La fonction doit être déclarée statique dans la déclaration de la classe, et la définition de la fonction ressemble alors à ceci :

void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

1voto

AngryWhenHungry Points 343

Si vous ne changez pas le pointeur ou l'objet pointé, pourquoi ne pas prendre une référence constante à la place ?

void Class::func(const OtherClass& otherClass) 
{ 
   // use otherClass ref for read-only use of OtherClass
}
void OtherClass::func()
{
  Class::func(*this);
}

0voto

sbi Points 100828

Cela compile bien sur ma machine :

#include <iostream>

class bar;

class foo {
public:
    static void f(const bar* b) { std::cout << b << '\n'; }
};

class bar {
public:
    void f() {foo::f(this);}
};

int main(void)
{
    bar b;
    b.f();
    return 0;
}

Alors, qu'est-ce que vous auriez fait différemment ?

0voto

Per Fagrell Points 551

Lorsqu'il s'agit de const et de pointeurs, l'astuce consiste à lire de droite à gauche. Regardez http://www.parashift.com/c++-faq-lite/const-correctness.html pour un bon aperçu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X