我偶然发现了一个相当奇特的c++ namespace 问题:

精简的例子:

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

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

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

我想在我的C++成员函数A::solve中调用c函数solve。编译器对我的意图不满意:
  error C2664: 'lp_solve_ilp::solve' : cannot convert parameter 1 from 'lprec *' to 'int'

有什么可以为我的solve函数添加前缀的吗? C::solve不起作用

最佳答案

要在全局 namespace 中调用函数,请使用:

::solve(lp);

无论函数是否为extern "C",都需要这样做。

关于C++:extern "C"与类成员之间的 namespace 冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2706009/

10-11 19:00