C ++:extern“C”和类成员之间的命名空间冲突

时间:2010-04-24 20:30:25

标签: c++ c namespaces conflict extern

我偶然发现了一个相当奇特的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 :: solve中调用c函数solve。编译器对我的意图不满意:

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

我可以在解决功能前加上什么吗? C :: solve不起作用

4 个答案:

答案 0 :(得分:9)

要在全局命名空间中调用函数,请使用:

::solve(lp);

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

答案 1 :(得分:2)

C函数位于全局命名空间中。所以试试

::solve(lp)

答案 2 :(得分:1)

请尝试::solve

答案 3 :(得分:1)

只需::solve(lp)。请注意,在您的课程声明后,您还需要一个分号。