2012-03-21 7 views
6

Aquí está el mensaje de error exacto en la compilación:error al obtener C3352 (función especificada no coincide con tipo de delegado), a pesar de que la función parece coincidir con el tipo delegado

C3352 de error: 'doble MyNamespace :: MyRefClass :: MyFunction (const std :: vector < _Ty> &, std :: vector < _Ty> &, void *) ': la función especificada no coincide con el tipo de delegado' doble (const std :: vector < _Ty> & , std :: vector < _Ty> &, void *) '

MyFunction es una función privada en la clase de referencia MyRefClass

El error citado aparece cuando intento crear una instancia del delegado privada MyDelegate, declaró en la misma clase de referencia, con el código:

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

Por lo que puedo decir, las firmas de la función MyFunctionWrapper coinciden con el delegado, por lo que no estoy seguro de qué está causando el error.

Para completar, el (privado) firma de la función es:

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

y la declaración de delegado (privada) es:

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

Respuesta

13

no veo la palabra static en su firma del método . Si el método no es estático, debe pasar el objeto al constructor delegado. Prueba esto:

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

Tienes razón, ¡gracias! – Rory

Cuestiones relacionadas