2012-03-21 5 views
6

Вот точное сообщение об ошибке на компиляции:Получение ошибки C3352 (заданная функция не соответствует типу делегата), хотя функция, похоже, соответствует делегат типа

ошибка C3352: «двойной MyNamespace :: MyRefClass :: MyFunction (Const станд :: вектор < _Ty> &, станд :: вектор < _Ty> &, пустота *) ': указанная функция не совпадает с типом делегата' двойной (константный зЬй :: вектор < _Ty> & , std :: vector < _Ty> &, void *) '

MyFunction является частной функцией в опорном классе MyRefClass

Котировочная ошибка появляется, когда я пытаюсь создать экземпляр частного делегата MyDelegate, объявленного в том же ссылочном классе, с кодом:

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

Насколько я могу судить, подписи функции MyFunctionWrapper соответствуют делегату, поэтому я не уверен, что вызывает ошибку.

Для полноты (частная) функция подписи:

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

и (частное) Делегат декларация:

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

ответ

13

Я не вижу слово static в вашей подписи метода , Если метод не является статическим, вам необходимо передать объект в конструктор делегата. Попробуйте следующее:

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

Ты точно прав - спасибо! – Rory