2011-08-22 28 views
23

Tôi muốn bọc thư viện C trong lớp C++. Đối với lớp C++ của tôi, tôi cũng muốn có cùng một khai báo được sử dụng bởi các hàm C: có thể thực hiện điều đó không?gọi hàm toàn cục với phương thức lớp có cùng khai báo

Nếu ví dụ tôi có trường hợp dưới đây, làm cách nào để phân biệt hàm C với C++? Tôi muốn gọi cho C một lần.

extern int my_foo(int val); // 

class MyClass{ 
    public: 
    int my_foo(int val){ 
      // what to write here to use 
      // the C functions? 
      // If I call my_foo(val) it will call 
      // the class function not the global one 
    } 
} 

Trả lời

40

Sử dụng scope resolution operator :::

int my_foo(int val){ 
    // Call the global function 'my_foo' 
    return ::my_foo(val); 
} 
+3

Bạn quên sử dụng toán tử phân giải phạm vi trong ví dụ mã của mình. Những gì bạn có bây giờ là một cuộc gọi chức năng đệ quy gây stackoverflow trên stackoveflow :) –

+0

@ Als, Bo: * Sigh * cảm ơn, làm thế nào ngớ ngẩn của tôi. –

4
::my_foo(val); 

rằng nên làm điều đó.

4

Sử dụng tên Qualified tra cứu

::my_foo(val); 

này cho trình biên dịch bạn muốn gọi hàm toàn cầu và không phải là chức năng của địa phương.

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