views:

297

answers:

4

Hi,

I stumbled upon a rather exotic c++ namespace problem:

condensed example:

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

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

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

I want to call the c function solve in my C++ member function A::solve. The compiler is not happy with my intent:

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

Is there something I can prefix the solve function with? C::solve does not work

+4  A: 

To call a function in the global namespace, use:

::solve(lp);

This is needed whether the function is extern "C" or not.

interjay
+1  A: 

The C functions are in the global namespace. So try

::solve(lp)
Mark
A: 

Please try ::solve

Drakosha
+1  A: 

Simply ::solve(lp). Note you also need a semicolon after your class declaration.

JRL