2012-03-21 40 views
6

Dưới đây là thông báo lỗi chính xác trên biên soạn:Bắt lỗi C3352 (chức năng được chỉ định không phù hợp với loại đại biểu), mặc dù chức năng dường như để phù hợp với đại biểu loại

lỗi C3352: 'MyNameSpace đôi :: MyRefClass :: MyFunction (const std :: vector < _Ty> &, std :: vector < _Ty> &, void *) ': hàm được chỉ định không khớp với loại đại biểu' double (const std :: vector < _Ty> & , std :: vector < _Ty> &, void *) '

MyFunction là một chức năng riêng trong lớp tham khảo MyRefClass

Các lỗi trích dẫn xuất hiện khi tôi cố gắng tạo ra một thể hiện của các đại biểu tin MyDelegate, tuyên bố trong lớp tham khảo cùng với các mã:

MyDelegate^ del = gcnew MyDelegate(&MyRefClass::MyFunction); 

Theo như tôi có thể biết, chữ ký của hàm MyFunctionWrapper khớp với đại biểu, vì vậy tôi không chắc chắn điều gì gây ra lỗi.

Để hoàn chỉnh, các (tư nhân) chức năng chữ ký là:

double MyFunction(const std::vector<double> &x, std::vector<double> &grad, void *data) 

và (tư nhân) tuyên bố đại biểu là:

delegate double MyDelegate(const std::vector<double> &x, std::vector<double> &grad, void *data); 

Trả lời

13

tôi không thấy từ static trong chữ ký phương pháp của bạn . Nếu phương thức không tĩnh, bạn cần truyền đối tượng cho hàm tạo của đại biểu. Hãy thử điều này:

MyDelegate^ del = gcnew MyDelegate(this, &MyRefClass::MyFunction); 
+0

Bạn hoàn toàn đúng - cảm ơn! – Rory

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