C++: конфликт пространства имен между экстерном “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 функцию, решают в моей функции членства A C++:: решить. Компилятор не счастлив с моим намерением:

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

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

5
задан JRL 24 April 2010 в 20:37
поделиться

4 ответа

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

::solve(lp);

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

9
ответ дан 18 December 2019 в 14:43
поделиться

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

::solve(lp)
2
ответ дан 18 December 2019 в 14:43
поделиться

Попробуйте :: решить

1
ответ дан 18 December 2019 в 14:43
поделиться

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

1
ответ дан 18 December 2019 в 14:43
поделиться