2010-04-24 5 views
5

je suis tombé sur un c plutôt exotique ++ problème d'espace de noms:C++: conflit d'espace de noms entre extern "C" et membre de la classe

exemple condensé:

extern "C" { 
void solve(lprec * lp); 
} 

class A { 
public: 
    lprec * lp; 
    void solve(int foo); 
} 

void A::solve(int foo) 
{ 
    solve(lp); 
} 

Je veux appeler la fonction c résoudre dans mon C++ fonction membre A :: solve. Le compilateur n'est pas satisfait de mon intention:

error C2664: 'lp_solve_ilp::solve' : cannot convert parameter 1 from 'lprec *' to 'int' 

Y a-t-il quelque chose avec lequel je peux préfixer la fonction de résolution? C :: résoudre ne fonctionne pas

Répondre

9

Pour appeler une fonction dans l'espace de noms global, utilisez:

::solve(lp); 

Ceci est nécessaire si la fonction est extern "C" ou non.

2

Les fonctions C se trouvent dans l'espace de noms global. Donc, essayez

::solve(lp) 
1

S'il vous plaît essayer ::solve

1

simplement ::solve(lp). Notez que vous avez également besoin d'un point-virgule après la déclaration de votre classe.

Questions connexes