C ++: конфликт пространства имен между extern "C" и членом класса - PullRequest
5 голосов
/ 25 апреля 2010

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

сокращенный пример:

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

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

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

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

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

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

Ответы [ 4 ]

9 голосов
/ 25 апреля 2010

Чтобы вызвать функцию в глобальном пространстве имен, используйте:

::solve(lp);

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

2 голосов
/ 25 апреля 2010

Функции C находятся в глобальном пространстве имен. Так что попробуйте

::solve(lp)
1 голос
/ 25 апреля 2010

Просто ::solve(lp). Обратите внимание, что вам также нужна точка с запятой после объявления класса.

1 голос
/ 25 апреля 2010

Пожалуйста, попробуйте ::solve

...