2010-04-24 30 views
5

tôi stumbled upon a C++ namespace vấn đề khá kỳ lạ:C++: namespace mâu thuẫn giữa extern "C" và thành viên lớp

đặc dụ:

extern "C" { 
void solve(lprec * lp); 
} 

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

void A::solve(int foo) 
{ 
    solve(lp); 
} 

Tôi muốn gọi hàm c giải quyết trong C của tôi ++ chức năng thành viên A :: giải quyết. Trình biên dịch không hài lòng với mục đích của tôi:

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

Có điều gì tôi có thể sử dụng chức năng giải quyết? C :: giải quyết không làm việc

Trả lời

9

Để gọi một hàm trong không gian tên toàn cầu, sử dụng:

::solve(lp); 

này là cần thiết cho dù chức năng là extern "C" hay không.

2

Các hàm C nằm trong không gian tên chung. Vì vậy hãy thử

::solve(lp) 
1

Đơn giản chỉ cần ::solve(lp). Lưu ý bạn cũng cần dấu chấm phẩy sau khi khai báo lớp học của bạn.

Các vấn đề liên quan