我偶然发现了一个相当奇特的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不起作用
答案 0 :(得分:9)
要在全局命名空间中调用函数,请使用:
::solve(lp);
无论函数是否为extern "C"
,都需要这样做。
答案 1 :(得分:2)
C函数位于全局命名空间中。所以试试
::solve(lp)
答案 2 :(得分:1)
请尝试::solve
答案 3 :(得分:1)
只需::solve(lp)
。请注意,在您的课程声明后,您还需要一个分号。