C++: конфликт на пространство от имена между extern C и член на класа

Попаднах на доста екзотичен проблем с пространството от имена на c++:

съкратен пример:

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

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

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

Искам да извикам c функцията solve в моята C++ членска функция A::solve. Компилаторът не е доволен от моето намерение:

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

Има ли нещо, с което мога да префиксирам функцията solve? C::solve не работи


person plaisthos    schedule 24.04.2010    source източник


Отговори (4)


За да извикате функция в глобалното пространство от имена, използвайте:

::solve(lp);

Това е необходимо независимо дали функцията е extern "C" или не.

person interjay    schedule 24.04.2010

C функциите са в глобалното пространство от имена. Така че опитайте

::solve(lp)
person mmmmmm    schedule 24.04.2010

Моля, опитайте ::solve

person Drakosha    schedule 24.04.2010

Просто ::solve(lp). Забележете, че също се нуждаете от точка и запетая след декларацията на вашия клас.

person JRL    schedule 24.04.2010