2012-04-24 25 views
9

Vui lòng giải thích những cảnh báo này bằng SWIG và cách tránh cảnh báo này?Cảnh báo 503 bởi SWIG là gì?

Warning 503: Can't wrap 'operator()' unless renamed to a valid identifier. 
Warning 503: Can't wrap 'operator =' unless renamed to a valid identifier. 
Warning 503: Can't wrap 'operator *' unless renamed to a valid identifier. 

Cảnh báo được tạo khi SWIG tạo mã C++ được biên dịch trong Android NDK.

+8

Đó không phải là cảnh báo G + +, đó là cảnh báo SWIG. – Flexo

+1

Tôi sẽ nói rằng trông giống như SWIG. Nó không phải là một vấn đề, trừ khi bạn muốn sử dụng các toán tử đó từ Java. –

+0

Cảm ơn thông tin, tôi đã chỉnh sửa câu hỏi của mình. – arsalank2

Trả lời

13

Java không có tương đương operator() hoặc operator= với cùng nghĩa như C++, vì vậy không có cách nào để SWIG trực tiếp quấn nó. Bởi vì chúng có thể quan trọng, bạn sẽ thấy một cảnh báo giải thích rằng chúng không bị bọc. (Thiếu operator= có thể đặc biệt xấu đôi khi).

Mã này thể hiện một cảnh báo như vậy khi chạy swig -Wall -c++ -java:

%module Sample 

struct test { 
    bool operator()(); 
}; 

Nhưng bạn có thể tắt các cảnh báo và nói với SWIG để lộ các nhà điều hành trực tiếp như một hàm thành viên thường xuyên bằng cách nói một cái gì đó như:

%module Sample 

%rename(something_else) operator(); 

struct test { 
    bool operator()(); 
}; 

Kết quả nào trong hàm có tên something_else được thêm vào thay cho operator() trong trình bao bọc được tạo.

Hoặc bạn có thể khẳng định để SWIG mà phớt lờ những chỉ là tốt sử dụng:

%ignore operator() 

(Bạn cũng có thể áp dụng một trong những chỉ thị ít rộng rãi bằng cách tuyển các nhà khai thác với tên lớp).

3

Bạn cần xử lý các toán tử quá tải theo cách đặc biệt trong SWIG, nếu bạn muốn sử dụng chúng theo ngôn ngữ đích. Xem here.

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