代码之家  ›  专栏  ›  技术社区  ›  plaisthos

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

  •  5
  • plaisthos  · 技术社区  · 16 年前

    我偶然发现了一个颇具异国情调的C++命名空间问题:

    简明示例:

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

    我想调用C函数解决我的C++成员函数A::解决。编译器不满意我的意图:

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

    有什么东西可以作为solve函数的前缀吗?C::解算不起作用

    4 回复  |  直到 16 年前
        1
  •  9
  •   interjay    16 年前

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

    ::solve(lp);
    

    无论函数是否 extern "C" 或者没有。

        2
  •  2
  •   mmmmmm    16 年前

    c函数在全局命名空间中。所以尝试

    ::solve(lp)
    
        3
  •  1
  •   Drakosha    16 年前

    请试试 ::solve

        4
  •  1
  •   JRL    16 年前

    简单地 ::solve(lp) . 注意,在类声明之后还需要分号。