2010-04-24 8 views
5

me topé con una C en lugar exótico ++ problema de espacio de nombres:C++: el conflicto de espacio de nombres entre extern "C" y miembro de la clase

ejemplo condensada:

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

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

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

Quiero llamar a la función c resolver en mi C++ función miembro A :: resolver. El compilador no es feliz con mi intención:

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

¿Hay algo que pueda prefijar la función de resolver con? C :: resolver no funciona

Respuesta

9

Para llamar a una función en el espacio de nombres global, el uso:

::solve(lp); 

Esto es necesario si la función es extern "C" o no.

2

Las funciones C se encuentran en el espacio de nombres global. Así que trate de

::solve(lp) 
1

Simplemente ::solve(lp). Tenga en cuenta que también necesita un punto y coma después de la declaración de su clase.

Cuestiones relacionadas