Я наткнулся на довольно экзотическую проблему пространства имен 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:: решите не работает
Чтобы вызвать функцию в глобальном пространстве имен, используйте:
::solve(lp);
Это необходимо вне зависимости от того, является ли функция extern «C»
или нет.
Функции C находятся в глобальном пространстве имен. Так что попробуйте
::solve(lp)
Просто :: решить (lp)
. Обратите внимание, что после объявления класса вам также нужна точка с запятой.