C ++ виртуальная (запечатанная) функция - PullRequest
4 голосов
/ 14 февраля 2010

Я использую классы из DLL в моем проекте C ++. Все работает нормально, пока ...

При попытке вызвать определенный метод (указанный в браузере объектов) я получаю сообщение об ошибке, что этот метод не является членом пространства имен.

После расследования я заметил, что этот метод указан как «виртуальная пустота x () загерметизированная».

Есть ли способ сделать вызов такой функции?

Ответы [ 3 ]

3 голосов
/ 15 февраля 2010

Для дальнейшего использования я только что получил ответ от службы поддержки корпоративных библиотек. Они разместили ссылку на следующее:

Управляемый C ++ и IDisposable Я пишу некоторый код, используя новый синтаксис Managed C ++ / CLI, и столкнулся с этой ошибкой:

ошибка C2039: «Утилизация»: не является членом «System :: IDisposable»

код, с которого я начал, был таким:

image->Dispose(); // image implements IDisposable

, которая выдала мне ту же ошибку компилятора, поэтому я хотел устранить ошибку класса / пространства имен, поэтому переписал ее так:

((IDisposable ^)image)->Dispose();

Который дал вышеуказанную ошибку. Хлоп!

Вот исправление:

используйте удаление. Управляемый C ++ теперь скрывает Dispose () внутри финализатора. Просто удалите объект, он обрабатывает все остальное. Чумовая.

Это действительно работает !!!!

2 голосов
/ 14 февраля 2010

Запечатано в ключевом слове CLI C ++ (управляемый C ++), характерном для .NET, а не для C ++ в целом.

sealed в функции означает, что вы не можете переопределить этот метод в производном типе.

sealed не означает, что вы не можете вызвать функцию, я предполагаю, что ваша функция private.

1 голос
/ 14 февраля 2010

Я не понимаю, почему это виртуальное и запечатанное должно само по себе помешать вам вызвать функцию. Согласно MSDN , ключевое слово sealed специально предназначено для виртуальных методов.

Можете ли вы дать какую-либо дополнительную информацию о данной функции и о том, как вы пытаетесь ее использовать?

...