5

我偶然发现了一个相当奇特的 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

4 回答 4

9

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

::solve(lp);

无论功能是否存在,这都是必需的extern "C"

于 2010-04-24T20:31:55.903 回答
2

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

::solve(lp)
于 2010-04-24T20:32:13.870 回答
1

简直了::solve(lp)。请注意,在类声明之后还需要一个分号。

于 2010-04-24T20:33:33.637 回答
1

请试试::solve

于 2010-04-24T20:32:22.530 回答