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

Я наткнулся на довольно экзотическую проблему пространства имен С++:

сжатый пример:

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

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

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

Я хочу вызвать функцию csolve в моей функции-члене C++ A::solve. Компилятор не доволен моим намерением:

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

Есть ли что-то, с чем я могу префикс функции решения? C::решить не работает


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