C ++:extern“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 :: solve中调用c函数solve。 编译器对我的意图不满意:

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

有什么我可以在解决function的前缀? C :: solve不起作用

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

 ::solve(lp); 

无论函数是否为extern "C"都需extern "C"

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

 ::solve(lp) 

请尝试::solve

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