2

Possible en double:
Class method and variable with same name, compile error in C++ not in Java?Le compilateur G ++ ne peut pas distinguer une variable et une fonction avec le même nom?

Le G ++ compilateur se plaindraient quand mon nom de membre de la classe et le nom de la fonction membre sont les mêmes. Il semble que chaque fois qu'un nom de variable arrive à être le même qu'un nom de fonction, le compilateur se plaindrait.

En Java, ce n'est pas le cas. Je me demande juste pourquoi le compilateur G ++ ne peut pas distinguer un nom de variable d'un nom de fonction puisque le nom de la fonction vient toujours avec une paire de parenthèses.

+1

Une question plus utile serait d'inclure un exemple de code qui ne compile pas et de nous demander pourquoi il ne compile pas. C++ et C ont des règles. Ils sont indépendants et différents des règles Java. C, C++ et Java sont trois langages de programmation différents. –

+0

En fait, vous pouvez également avoir le même problème en Java (classes ou champs dans ce cas). En Java, il est résolu par a) en utilisant des conventions de nommage sensibles et b) umn Je pense que le champ a la priorité en cas d'ambiguïtés. – Voo

+0

@Voo BTW, que signifie "umn" dans votre commentaire? –

Répondre

8
struct Callable 
{ 
    void operator()() const { } 
}; 

struct Test 
{ 
    void Call() { } 
    Callable Call; 
}; 

int main() 
{ 
    Test x; 
    x.Call(); // To which 'Call' does this refer? 
} 
3

est ici deux raisons:

  • La variable peut entraîner une surcharge operator()
  • On pourrait prendre l'adresse ou créer des références de la fonction (en utilisant son nom sans appel de fonction associée ())

Dans le premier cas, que ferait variable()? dans la seconde, le compilateur devrait déterminer l'opération correcte par le type de retour d'une opération - ce que C++ n'autorise pas pour toutes sortes de raisons.

Questions connexes